您的位置:首页 > 其它

HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

2012-07-26 11:05 357 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2191

裸多重背包

View Code

#include <iostream>
#include <algorithm>
using namespace std ;
int dp[10001] ;
int c[101],w[101],num[101] ;
int V ;
bool cmp(int a,int b)
{
return a>b ;
}
void ZeroOnePack(int c,int w)
{
for(int i=V;i>=c;i--)
dp[i]=max(dp[i],dp[i-c]+w) ;
return ;
}
void CompletePack(int c,int w)
{
for(int i=c;i<=V;i++)
dp[i]=max(dp[i],dp[i-c]+w) ;
return ;
}
void MultiplePack(int c,int w,int a)
{
if(c*a>=V)
{
CompletePack(c,w) ;
return ;
}
int k=1 ;
while(k<a)
{
ZeroOnePack(k*c,k*w) ;
a-=k ;
k<<=1 ;
}
ZeroOnePack(a*c,a*w) ;
}
int main()
{
int t ;
scanf("%d",&t) ;
while(t--)
{
int n,m ;
scanf("%d%d",&n,&m) ;
for(int i=0;i<m;i++)
scanf("%d%d%d",&c[i],&w[i],&num[i]) ;
memset(dp,0,sizeof(dp)) ;
V=n ;
for(int i=0;i<n;i++)
MultiplePack(c[i],w[i],num[i]) ;
sort(dp,dp+10001,cmp) ;
printf("%d\n",dp[0]) ;
}
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐