- 题意:
- 有t个例子,然后输入n和v,n代表有多少骨头,v代表背包体积,每样东西只有一个,只能取一次
- 思路:动态规划的思想,用空间换时间,过程中会产生大量之间数据,我们用一维数组来存储数据,背包九讲就是用二维数组来讲解
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N = 1005;
- int n, v, d[N], val[N], vol[N], cas;
- int main()
- {
- scanf ("%d", &cas);
- while (cas--)
- {
- memset (d, 0, sizeof (d));
- scanf ("%d%d", &n, &v);
- for (int i = 1; i <= n; ++i)
- scanf ("%d", &val[i]);
- for (int i = 1; i <= n; ++i)
- {
- scanf ("%d", &vol[i]);
- for (int j = v; j >= vol[i]; --j)
- d[j] = max (d[j], d[j - vol[i]] + val[i]);
- }
- printf ("%d\n", d[v]);
- }
- return 0;
- }
动态规划——problem q
最新推荐文章于 2022-12-25 14:11:05 发布