01背包问题
时间限制:1秒 内存限制:128M
题目描述
一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是 W1,W2,...,Wn ,它们的价值分别为 C1 , C2 ,..., Cn ,求旅行者能获得最大总价值。
输入描述
第一行:两个整数,M (背包容量,M≤200 )和 N (物品数量, N≤20 );
第 2..N+1 行:每行二个整数 Wi,Ci ,表示每个物品的重量和价值。
输出描述
仅一行,一个数,表示最大总价值。
样例
输入
10 4 2 1 3 3 4 5 7 9
输出
12
#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<algorithm>
using namespace std;
int w[205],c[20],f[1000][1000];
int main() {
int m, n;
cin >> m >> n;
for (int i=1;i<= n; i++) {
cin>>w[i]>>c[i];
}
for (int i=1; i<=n; i++) {
for (int j = 0; j <= m; j++) {
if (j >= w[i]) {
f[i][j] = max(f[i-1][j], f[i-1][j-w[i]] + c[i]);
}
else {
f[i][j] = f[i-1][j];
}
}
}
cout << f[n][m] << endl;
return 0;
}