标签:c++
题目链接:
题意:
给出一张M X N的地图,Gorwin要通过右移或下移的方式从地图的(1,1)走到(m,n),而且每个点都有一块给定重量的蛋糕,因为Gorwin有食量上限v,所以Gorwin经过每一个点的时候能选择吃或不吃,问Gorwin到达(m,n)能吃到蛋糕的最大重量。
代码:
#include<iostream> #include<cstdio> #include<cstring> #define MAXN 105 using 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; }
hdu5234 Happy birthday 三维0-1背包
标签:c++
原文地址:http://blog.csdn.net/axuan_k/article/details/45967045