题目链接:
题意:
给出一张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;
}