题目大意:
有个大怪兽,他去别的地方偷吃东西,他带了一个大袋子去吃东西。每个事物有一个价值和一个容量。让你去帮助小怪兽决策,怎样选择物品才能获得最大的价值
思路:
基础的 0 1 背包的问题
感想:
问题理解了很久,就像豆豆说的那样从二维到 一维的优化。
AC代码:
- #include <iostream>
- #include<stdio.h>
- #include<algorithm>
- #include<string.h>
- #include<cmath>
- #include<cstdio>
- using namespace std;
- int main()
- {
- //freopen("r.txt","r",stdin);
- int T,n,Vol,i,j;
- int a;
- cin>>T;
- while(T--)
- {
- scanf("%d%d",&n,&Vol);
- int val[1005];
- int vol[1005];
- int dp[1005];
- for(i=1;i<=n;i++)
- {
- scanf("%d",&val[i]);
- }
- for(i=1;i<=n;i++)
- {
- scanf("%d",&vol[i]);
- }
- memset(dp,0,sizeof(dp));
- for(i=1;i<=n;i++)
- {
- for(j=Vol;j>=vol[i];j--)
- {
- dp[j]=max(dp[j],dp[j-vol[i]]+val[i]);
- }
- // cout<<dp[i]<<endl;
- }
- cout<<dp[Vol]<<endl;
- }
- }