关闭

Educational Codeforces Round 1 E. Chocolate Bar(记忆化搜索)

240人阅读 评论(0) 收藏 举报
分类:

题目链接
题意:在n*m的矩形切出面积是k
解法:记忆化搜索


#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define X first
#define Y second
#define cl(a,b) memset(a,b,sizeof(a))
typedef pair<int,int> P;
const int maxn=100005;
const LL inf=1<<27;
const LL mod=1e9+7;
LL dp[35][35][55];
LL dfs(int n,int m,int k){
    //printf("n = %d, m = %d, k = %d\n",n,m,k);
    if(k==0||m*n==k)return 0;
    if(dp[n][m][k]!=-1)return dp[n][m][k];
    LL ans=inf;
    for(int i=1;i<n;i++){
        for(int j=0;j<=k;j++){
            ans=min(ans,dfs(i,m,j)+dfs(n-i,m,k-j)+(LL)m*m);
        }
    }
    for(int i=1;i<m;i++){
        for(int j=0;j<=k;j++){
            ans=min(ans,dfs(n,i,j)+dfs(n,m-i,k-j)+(LL)n*n);
        }
    }
    return dp[n][m][k]=ans;
}

int main(){
    int T;scanf("%d",&T);cl(dp,-1);
    while(T--){
        int n,m,k;
        scanf("%d%d%d",&n,&m,&k);
        printf("%lld\n",dfs(n,m,k));
    }
    return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:158711次
    • 积分:6564
    • 等级:
    • 排名:第3619名
    • 原创:522篇
    • 转载:3篇
    • 译文:0篇
    • 评论:12条
    文章分类
    最新评论