题目 :http://codevs.cn/problem/1669/
题意如下
有 N 个物品
给出最大 V, G
给出每个物品的 v, g, t
求用 V, G 能装下的最多的 t
分析
一看就知道是动规对不对
一看就知道是背包对不对
一看就知道是二维的对不对
所以懒得弄了
所以得到公式 :
f[i][j]=max(f[i][j],f[i−v][j−g]+t)
好,就是这样
代码
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1050;
int f[maxn][maxn], N, V, G, t, v, g;
int main() {
scanf("%d%d%d", &G, &V, &N);
for(int i = 1; i <= N; i++) {
scanf("%d%d%d", &t, &g, &v);
for(int j = G; j >= g; j--)
for(int k = V; k >= v; k--)
f[j][k] = max(f[j][k], f[j-g][k-v]+t);
}
printf("%d\n", f[G][V]);
return 0;
}
这种题真的有必要写吗……