Light OJ 1223 Testing Mailboxes (DP)

来源:互联网 发布:电子产品设计软件 编辑:程序博客网 时间:2024/06/06 22:44

解析:记忆化一下就好,整体的复杂度是小于10^8的。

[code]:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int INF = 0x3f3f3f3f;int n,m,dp[105][105][105];void init(){    int i,l,r;    memset(dp,-1,sizeof(dp));    for(i = 1;i <= 100;i++){        for(l = 1;l <= 100;l++){            dp[i][l][l] = l;            dp[i][l][l+1] = 2*l+1;        }    }    for(l = 1;l <= 100;l++){        for(r = l;r <= 100;r++){            dp[1][l][r] = (r-l+1)*(l+r)/2;        }    }}int dfs(int i,int l,int r){    if(r < l) return 0;    if(dp[i][l][r]!=-1) return dp[i][l][r];    dp[i][l][r] = INF;    for(int k = l;k <= r;k++){        dp[i][l][r] = min(dp[i][l][r],k+max(dfs(i-1,l,k-1),dfs(i,k+1,r)));    }    return dp[i][l][r];}int main(){    int i,j,cas;    init();    scanf("%d",&cas);    for(int T=1;T<=cas;T++){        scanf("%d%d",&n,&m);        printf("Case %d: %d\n",T,dfs(n,1,m));    }    return 0;}


0 0
原创粉丝点击