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

来源:互联网 发布:2016淘宝客赚不赚钱 编辑:程序博客网 时间:2024/05/23 14:34

题目链接
题意:在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
原创粉丝点击