博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva--562Dividing coins +dp
阅读量:6592 次
发布时间:2019-06-24

本文共 727 字,大约阅读时间需要 2 分钟。

题意:

    给定一堆硬币,然后将他们分成两部分,使得两部分的差值最小;输出这个最小的差值。

思路:

   想了好久都没想到一个合适的状态转移方程。后面看了别人的题解后,才知道能够转成背包问题求解。

我们将全部的硬币和的一半作为背包容量,然后将硬币的代价看成其本身的面值。然后背包中能装的最大容量

就是当中一个人分得硬币数。

代码例如以下:

#include
#include
#include
using namespace std;int main(){ int i,j,k,t; scanf("%d",&t); while(t--) { int m,a[110],dp[100000],sum=0; memset(dp,0,sizeof(dp)); scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d",&a[i]); sum+=a[i]; } int V=sum/2; for(i=1;i<=m;i++) for(j=V;j>=a[i];j--) dp[j]=max(dp[j],dp[j-a[i]]+a[i]); printf("%d\n",sum-2*dp[V]); } return 0;}

  

转载地址:http://hodio.baihongyu.com/

你可能感兴趣的文章
EF6+Sqlite连接字符串的动态设置
查看>>
下拉加载更多
查看>>
您是哪一种类型的老板?
查看>>
SQL SERVER 2012 只能识别20个CPU的问题
查看>>
设计模式(十)外观模式
查看>>
C/C++语言中Static的作用详述
查看>>
[Android Samples视频系列之ApiDemos] App-Activity-Recreate
查看>>
ASP开发基础
查看>>
MYSQL性能调优
查看>>
LVM自动扩容
查看>>
笔记整理4
查看>>
idea文件折叠显示出来配置
查看>>
SQLSERVER中的非工作时间不得插入数据的触发器的实现
查看>>
如何写出兼容大部分浏览器的CSS 代码
查看>>
第二阶段冲刺第八天,6月7日。
查看>>
java的左移位(<<)和右移位(>>)和无符号右移(>>>)
查看>>
struts2 action 返回类型分析
查看>>
【原创】FPGA开发手记(三) PS/2键盘
查看>>
linux统计多个文件大小总和
查看>>
java基础-Eclipse开发工具介绍
查看>>