动态规划的引入 P1048 采药01背包
Posted jason66661010
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划的引入 P1048 采药01背包相关的知识,希望对你有一定的参考价值。
题目
https://www.luogu.com.cn/problem/P1048
题目分析
代码
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int f[1001], v[200], w[200]; int main() { int t, m; scanf("%d%d", &t, &m); for (int i = 1; i <= m; i++) scanf("%d%d", &w[i], &v[i]); for (int i = 1; i <= m ; i++) for (int j = t; j >= w[i]; j--) f[j] = max(f[j], f[j - w[i]] + v[i]); printf("%d", f[t]); }
注意事项
f【i】数组的概念是当背包的容量是i的时候能获得的最大价值,所以i的范围是数字t的范围
for (int i = 1; i <= m ; i++):一共m个物品,我们分别判断每个物品取或者不取的情况
for (int j = t; j >= w[i]; j--):当背包的容量在w【i】~t的范围才能有选择是不是要装该物品(f[j] = max(f[j], f[j - w[i]] + v[i]);装不装哪个价值大),如果不在该范围的话就一定不能装入
以上是关于动态规划的引入 P1048 采药01背包的主要内容,如果未能解决你的问题,请参考以下文章