简单题意:
第一行输入几组数据,第二行第一个数字代表物体个数,第二个数代表总体积 第三行输入的是物品的价值,第四行输入的是物品的体积。物体不能拆分,已知背包的总体积,求最大能获取的价值是多少。
解题思路:
将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为f[j-c[i]];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-c[i]的背包中”,此时能获得的最大价值就是f[j-c[i]]再加上通过放入第i件物品获得的价值w[i]
代码如下:
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn=1002;
int num[maxn];
int sum[maxn];
int n;
int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
sum[1]=num[1];
int ans=sum[1];
for(int i=2;i<=n;i++)
{
sum[i]=num[i];
for(int j=1;j<i;j++)
{
if(num[j]<num[i]&&sum[j]+num[i]>sum[i])
sum[i]=sum[j]+num[i];
}
if(ans<sum[i])
ans=sum[i];
}
printf("%d\n",ans);
}
return 0;
}