设为首页 加入收藏

TOP

UVa 562: Dividing Coins
2014-11-23 21:27:59 来源: 作者: 【 】 浏览:1
Tags:UVa 562: Dividing Coins
题意:给一串数字作为硬币的币值,将这些硬币分给两个人A和B,要求越平均越好。
假设总钱数为Sum且A分得的钱不超过B,开数组dp,dp[i]表示A是否可以分得一些硬币使得其总钱数为i,dp[i]为1表示可以,0表示不可以。
dp数组初始化为0,dp[0]=1。然后分别对M个硬币枚举,判断dp是否可置为1即可。最后选择离Sum/2最近且dp[i]==1的i即可。
我的解题代码如下:
#include 
#include 
#include 
#include 
#include 

using namespace std;
#define min(a,b) (a> N;
	while(N--)
	{
		cin >> M;
		Sum = 0;
		for(int i=0; i> Coin[i]; Sum += Coin[i]; }
		memset(dp,0,sizeof(dp));
		dp[0] = 1;

		for(int i=0; i=0; j--)  //可以优化:for(int j=Sum/2-Coin[i]; j>=0; j--) 因为我们最后只要比Sum/2小的i值
			{
				if(dp[j]) dp[j+Coin[i]] = 1;
			}
		}

		for(int i=Sum/2; i>=0; i--) if(dp[i])
		{
			cout << Sum-2*i << endl;
			break;
		}
	}
	return 0;
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 4090 GemAnd Prince (DFS+BF.. 下一篇hdu4082 Hou Yi's secret

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何理解c语言指针和 (2025-12-27 01:19:11)
·为什么C标准库没有链 (2025-12-27 01:19:08)
·玩转C语言和数据结构 (2025-12-27 01:19:05)
·MySQL 基础入门视频 (2025-12-26 23:20:22)
·小白入门:MySQL超详 (2025-12-26 23:20:19)