P2871 [USACO07DEC]手链Charm Bracelet

来源:互联网 发布:宁波指动网络董事长 编辑:程序博客网 时间:2024/04/29 13:29

题目大意

有N件物品和一个容量为M的背包。第i件物品的重量是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大(1 ≤ N ≤ 3,402,1 ≤ M ≤ 12,880,1 ≤ Wi ≤ 400,1 ≤ Di ≤ 100)


这题显然是一个0-1背包,然后~~就没有然后了。

代码如下:

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;const int N=20000;int a[N],b[N],s[N];int main(){    int m,n,i,j;    cin>>n>>m;    for(i=1;i<=n;i++)    scanf("%d%d",&a[i],&b[i]);    for(i=1;i<=n;i++)        for(j=m;j>=a[i];j--)            if(s[j]<s[j-a[i]]+b[i])                s[j]=s[j-a[i]]+b[i];    cout<<s[m];    return 0;}

P.S.我才不会告诉你这题是P1048采药的升级版呢

0 0