标签:
状态转移方程:dp[i][j][k]----在i,j位置时,最大容量为k时的最大值;
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include<vector> #include<queue> #include<algorithm> using namespace std; typedef long long LL; const int maxn=109; const int INF=0x3f3f3f3f; const int mod=2009; int dp[maxn][maxn][maxn]; int num[maxn][maxn]; int main() { int n, m, k; while(~scanf("%d %d %d", &n, &m, &k)) { for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) scanf("%d", &num[i][j]); memset(dp, 0, sizeof(dp)); for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { for(int z=k; z>=num[i][j]; z--) { int x=max(dp[i-1][j][z], dp[i][j-1][z]); int y=max(dp[i-1][j][z-num[i][j]]+num[i][j], dp[i][j-1][z-num[i][j]]+num[i][j]); dp[i][j][z]=max(x, y); } } } printf("%d\n", dp[n][m][k]); } return 0; }
标签:
原文地址:http://www.cnblogs.com/w-y-1/p/5796560.html