题意:一袋硬币两人分,要么公平分,要么不公平,如果能公平分,输出0,否则输出分成两半的最小差距。

思路:将提供的整袋钱的总价取一半来进行01背包,如果能分出出来,就是最佳分法。否则背包容量为一半总价的包能装下的硬币总值就是其中一个人能分得的最多的钱了,总余下的钱减去这包硬币总值。(只需要稍微考虑一下总值是奇数/偶数的问题)

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <cmath>
using namespace std;
const int N=;
int w[N], dp[N]; void cal(int n, int cnt)
{
int m;
if(cnt&==) m = (cnt>>) + ;//奇数
else m=cnt>>; for(int i=; i<n; i++)
for(int j=m; j>=w[i]; j--)
dp[j]=max( dp[j-w[i]]+w[i], dp[j] ); if(cnt&==)//奇数
{
if(dp[m]==m) cout<<""<<endl; //最公平
else cout<<cnt-dp[m]-dp[m]<<endl;
}
else
{
if(dp[m]==m) cout<<""<<endl; //最公平
else cout<<cnt-dp[m]-dp[m]<<endl;
} } int main()
{
//freopen("input.txt","r",stdin);
int t, n, cnt;
cin>>t;
while(t--)
{
memset(dp, , sizeof(dp));
memset(w, , sizeof(w));
cin>>n;
cnt=;
for(int i=; i<n; i++)
{
scanf("%d",&w[i]);
cnt+=w[i];
}
if(n==)
cout<<""<<endl;
else if(n==)
cout<<w[]<<endl;
else if(n==)
cout<<abs(w[]-w[])<<endl;
else
cal(n, cnt);
}
return ;
}

AC代码

UVA 562 Dividing coins 分硬币(01背包,简单变形)的更多相关文章

  1. UVA 562 Dividing coins --01背包的变形

    01背包的变形. 先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值. 代码: #include <iostre ...

  2. UVA 562 Dividing coins(dp + 01背包)

    Dividing coins It's commonly known that the Dutch have invented copper-wire. Two Dutch men were figh ...

  3. uva 562 Dividing coins(01背包)

      Dividing coins  It's commonly known that the Dutch have invented copper-wire. Two Dutch men were f ...

  4. UVA 562 Dividing coins (01背包)

    题意:给你n个硬币,和n个硬币的面值.要求尽可能地平均分配成A,B两份,使得A,B之间的差最小,输出其绝对值.思路:将n个硬币的总价值累加得到sum,   A,B其中必有一人获得的钱小于等于sum/2 ...

  5. UVA 562 Dividing coins (01背包)

    //平分硬币问题 //对sum/2进行01背包,sum-2*dp[sum/2] #include <iostream> #include <cstring> #include ...

  6. UVA 562 Dividing coins【01背包 / 有一堆各种面值的硬币,将所有硬币分成两堆,使得两堆的总值之差尽可能小】

    It's commonly known that the Dutch have invented copper-wire. Two Dutch men were fighting over a nic ...

  7. UVa 562 - Dividing coins 均分钱币 【01背包】

    题目链接:https://vjudge.net/contest/103424#problem/E 题目大意: 给你一堆硬币,让你分成两堆,分别给A,B两个人,求两人得到的最小差. 解题思路: 求解两人 ...

  8. UVA 562 Dividing coins

    题目描述:给出一些不同面值的硬币,每个硬币只有一个.将这些硬币分成两堆,并且两堆硬币的面值和尽可能接近. 分析:将所有能够取到的面值数标记出来,然后选择最接近sum/2的两个面值 状态表示:d[j]表 ...

  9. Codeforces 2016 ACM Amman Collegiate Programming Contest A. Coins(动态规划/01背包变形)

    传送门 Description Hasan and Bahosain want to buy a new video game, they want to share the expenses. Ha ...

随机推荐

  1. CF-811B

    B. Vladik and Complicated Book time limit per test 2 seconds memory limit per test 256 megabytes inp ...

  2. Linux 程式減肥(strip & objcopy)(转载)

    转自:http://calamaryshop.blogspot.com/2011/11/linux-strip-objcopy.html 對於設計嵌入式Linux系統的研發人員來說,記憶體的空間是非常 ...

  3. windows如何定时关闭一个程序

    方法一其实系统本身有这项功能的,打开记事本,将以下内容保存为.bat文件(将下面cmd.exe的名字改成你的音乐播放软件的exe名)@echo offTASKKILL /F /IM cmd.exe / ...

  4. Working Experience - WPF XAML 报错 - 命名空间中不存在该名称

    问题 编辑 xaml 时,VS 提示一个存在的类不存在(如:命名空间"xxx"中不存在"xxx"名称). 运行环境 Windows 版本:Window 10 V ...

  5. CentOS 安装Perl环境

    参考博文:https://blog.csdn.net/weixin_40192129/article/details/78610974 vmware tools需要perl环境的支持 安装perl支持 ...

  6. spring配置与使用

    1. 创建基于java的配置. 配置极少量的XML来启用java配置: <?xml version="1.0" encoding="UTF-8"?> ...

  7. Shader 模板缓冲和模板测试

    http://blog.sina.com.cn/s/blog_6e159df70102xa67.html 模板缓冲的概念 Unity官方的Shader文档根本没有提到这个玩意,这个概念也是看到了UGU ...

  8. cf822C(贪心)

    题目链接: http://codeforces.com/problemset/problem/822/C 题意: 有n条线段(n<=2e5) 每条线段有左端点li,右端点ri,价值cost(1 ...

  9. 基于testcontainers的现代化集成测试进阶之路

    大型的软件工程项目除了大量的产品级代码外必不可少的还有大量的自动化测试.自动化测试包含从前端到后端甚至到产品线上不同模块和环境的各种类型的测试.一个比较经典的关于自动化测试分布的理论就是测试金字塔,是 ...

  10. LInux temp 目录太小不够用问题

    2013-10-18 11:01 可以自己建一个临时 目录看看 dev /#su - root #mkdir /opt/tmp #chown root /opt/tmp/ #chgrp root /o ...