hdu5234 Happy birthday 三维0-1背包

来源:互联网 发布:秒杀抢购软件 编辑:程序博客网 时间:2024/06/08 05:48

题目链接:

hdu5234





题意:

给出一张M X N的地图,Gorwin要通过右移或下移的方式从地图的(1,1)走到(m,n),而且每个点都有一块给定重量的蛋糕,因为Gorwin有食量上限v,所以Gorwin经过每一个点的时候能选择吃或不吃,问Gorwin到达(m,n)能吃到蛋糕的最大重量。






代码:

#include<iostream>#include<cstdio>#include<cstring>#define MAXN 105using namespace std;int dp[MAXN][MAXN][MAXN];int w[MAXN][MAXN];int max(int a,int b){    return a>b?a:b;}int main(){    int n,m,v;    while(~scanf("%d%d%d",&n,&m,&v))    {        for(int i=1; i<=n; i++)            for(int j=1; j<=m; j++)                scanf("%d",&w[i][j]);        memset(dp,0,sizeof(dp));        for(int i=1; i<=n; i++)            for(int j=1; j<=m; j++)                for(int k=1; k<=v; k++)                {                        dp[i][j][k]=max(dp[i][j][k],max(dp[i-1][j][k],dp[i][j-1][k]));            //必须有,两边的结果可能更大                    if(k>=w[i][j])                    {                        dp[i][j][k]=max(dp[i][j][k],dp[i-1][j][k-w[i][j]]+w[i][j]);                        dp[i][j][k]=max(dp[i][j][k],dp[i][j-1][k-w[i][j]]+w[i][j]);                    }                }        cout<<dp[n][m][v]<<endl;    }    return 0;}


0 0
原创粉丝点击