hdu1059 Dividing(多重背包+二进制优化)

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1059

题目大意:

有价值分别为1~6的弹珠,不同价值的弹珠有不同的数量。两个人要分成相同的价值,问能不能分成功。

思路:

典型的多重背包。加上二进制优化。

代码:

#include
#include
int max(int a,int b)
{
	if(a>b)return a;
	else return b;
}
int ave,dp[200005];
void zero(int cost)
{
	for(int i=ave;i>=cost;i--)
	dp[i]=max(dp[i],dp[i-cost]+cost);
}
void complet(int cost)
{
	for(int i=cost;i<=ave;i++)
	dp[i]=max(dp[i],dp[i-cost]+cost);
}
void multi(int cost ,int amount)
{
   	if(cost*amount>=ave)
   	{
	   	complet(cost);
	   	return;
	   }
	   int k=1;
	   while(k


你可能感兴趣的:(hdu,动态规划----------,背包dp)