题目
动态规划-01背包
思路
01背包例题,思路见同一专栏的【NC16693】装箱问题,这里只贴出代码。
代码
#include <stdio.h>
int max(int a, int b) { return a > b ? a : b; }
int main(void) {
int n = 0, m = 0;
scanf("%d%d", &n, &m);
// a[m][2] 将耗时和价值合成了一个数组
int a[m][2], dp[n + 1], i = 0, j = 0;
for (i = 0; i < m; i++) {
scanf("%d%d", &a[i][0], &a[i][1]);
}
for (i = 0; i <= n; i++) {
dp[i] = 0;
}
for (i = 0; i < m; i++) {
for (j = n; j >= a[i][0]; j--) {
dp[j] = max(dp[j], dp[j - a[i][0]] + a[i][1]);
}
}
printf("%d\n", dp[n]);
return 0;
}