| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
多重背包#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int W,n;
int w[10005];
int cnt;
int dp[100005];
int main()
{
while(scanf("%d%d",&W,&n)!=EOF)
{
memset(dp,0,sizeof(dp));
cnt=0;
for(int i=0;i<n;i++)
{
int b,v;
scanf("%d%d",&b,&v);
int e=1;
while(e<=b)
{
w[cnt++]=e*v;
b-=e;
e<<=1;
}
w[cnt++]=b*v;
}
for(int i=0;i<cnt;i++)
for(int j=W;j>=w[i];j--)
dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
printf("%d\n",dp[W]);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator