zoukankan      html  css  js  c++  java
  • [CF598E] Chocolate Bar

    [CF598E] Chocolate Bar - dp

    Description

    (n×m) 的巧克力块切若干次,使得形成的若干个碎片的大小和为 (k) 的最小花费,每切的费用是切长的平方 (n,mle 30, k le 50)

    Solution

    (f[i][j][k]) 表示 (i imes j) 的巧克力得到大小为 (k) 的巧克力的最小花费

    暴力切割转移枚举分配

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    const int N = 55;
    
    int f[N][N][N];
    
    signed main()
    {
        memset(f, 0x3f, sizeof f);
        for (int i = 1; i <= 30; i++)
            for (int j = 1; j <= 30; j++)
                if (i * j <= 50)
                    f[i][j][i * j] = 0;
        for (int i = 1; i <= 30; i++)
            for (int j = 1; j <= 30; j++)
                f[i][j][0] = 0;
        for (int i = 1; i <= 30; i++)
        {
            for (int j = 1; j <= 30; j++)
            {
                for (int k = 1; k <= 50; k++)
                {
                    for (int x = 1; x < i; x++)
                    {
                        for (int y = 0; y <= k; y++)
                        {
                            f[i][j][k] = min(f[i][j][k], f[x][j][y] + f[i - x][j][k - y] + j * j);
                        }
                    }
                    for (int x = 1; x < j; x++)
                    {
                        for (int y = 0; y <= k; y++)
                        {
                            f[i][j][k] = min(f[i][j][k], f[i][x][y] + f[i][j - x][k - y] + i * i);
                        }
                    }
                }
            }
        }
        int t;
        cin >> t;
        while (t--)
        {
            int n, m, k;
            cin >> n >> m >> k;
            cout << f[n][m][k] << endl;
        }
    }
    
  • 相关阅读:
    Dart语言学习笔记(5)
    使用 Dart 调用 REST API
    JSON数据的解析和生成(Dart)
    趣味编程:静夜思(Dart版)
    正则表达式(Dart)
    Dart语言学习笔记(4)
    Dart语言学习笔记(3)
    C++11特性之右值引用
    各大编程字体比较
    优先队列的应用 C++实现
  • 原文地址:https://www.cnblogs.com/mollnn/p/14618767.html
Copyright © 2011-2022 走看看