您的位置:首页 > 其它

POJ 3624 Charm Bracelet (01背包)

2014-10-12 20:34 381 查看
CharmBracelet

TimeLimit:1000MSMemoryLimit:65536K
TotalSubmissions:23950Accepted:10802
Description

Bessiehasgonetothemall'sjewelrystoreandspiesacharmbracelet.Ofcourse,she'dliketofillitwiththebestcharmspossiblefromtheN(1≤N≤3,402)availablecharms.EachcharmiinthesuppliedlisthasaweightWi(1≤Wi≤400),a'desirability'factorDi(1≤Di≤100),andcanbeusedatmostonce.BessiecanonlysupportacharmbraceletwhoseweightisnomorethanM(1≤M≤12,880).

Giventhatweightlimitasaconstraintandalistofthecharmswiththeirweightsanddesirabilityrating,deducethemaximumpossiblesumofratings.

Input

*Line1:Twospace-separatedintegers:NandM
*Lines2..N+1:Linei+1describescharmiwithtwospace-separatedintegers:WiandDi

Output

*Line1:Asingleintegerthatisthegreatestsumofcharmdesirabilitiesthatcanbeachievedgiventheweightconstraints

SampleInput

46
14
26
312
27

SampleOutput

23

大致题意:贝西有一堆首饰,每个首饰有它的魅力值和重量。现在第一行输入n个首饰和最大重量为m。接下来n行每行两个数a和b,a为首饰的魅力值,b为该首饰的魅力值。求贝西能在不超过最大重量的情况下,最大魅力值是多少?

#include<iostream>
usingnamespacestd;
intf[12900];
intw[3410],v[3410];
intmain(void)
{
intn,m,i;
cin>>n>>m;
for(i=1;i<=n;i++)
cin>>w[i]>>v[i];
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)
for(intj=m;j>=w[i];j--)
if(f[j-w[i]]+v[i]>f[j])
f[j]=f[j-w[i]]+v[i];
cout<<f[m]<<endl;
return0;
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: