博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组分割
阅读量:6578 次
发布时间:2019-06-24

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

有一个无序,元素个数为2n的正整数数组,把这个数组分成两个n的子数组,子数组和最接近?

 

将其转化为0/1背包问题,将容量为n的背包放入元素,元素的体积为1,重量为其大小,如何装使其接近于重量sum/2,

sum为2n的和。

 

1 #include 
2 #include
3 4 using namespace std; 5 6 int main() 7 { 8 int n=5; 9 int nArray[10] = {
1,5,7,8,9,6,3,11,20,17};10 11 //0/1背包12 int sum=0;13 for(int i=0; i<2*n; i++)14 {15 sum+=nArray[i];16 }17 //容量为n的背包,装满n件物品时,能达到的价值,只考虑小于等于sum/2的价值18 bool dp[n+1][sum/2+1];19 memset(dp,0,sizeof(dp));20 dp[0][0]=true;21 for(int k=2*n-1; k>=0; k--)22 {23 for(int i=1; i<=n; i++)24 {25 for(int v=0; v<=sum/2; v++)26 {27 if(dp[i-1][v] && v+nArray[k]<=sum/2)28 {29 dp[i][v+nArray[k]]=true;30 }31 }32 }33 }34 int maxV;35 for(int v=sum/2; v>=0; v--)36 {37 if(dp[n][v])38 {39 maxV=v;40 break;41 }42 }43 cout<
<<"/"<
<

转载于:https://www.cnblogs.com/eric-blog/archive/2012/08/11/2633693.html

你可能感兴趣的文章
【转】Cocoa中的位与位运算
查看>>
uva 10082 - WERTYU
查看>>
【天天数据结构和算法】PHP实现二叉搜索树
查看>>
团队作业4--第一次项目冲刺(Alpha版本) 4
查看>>
自然数的拆分问题 字典序
查看>>
PageControl 组件
查看>>
初识Python
查看>>
Python3中isdigit(), isdecimal(), isnumeric()的区别和字符串的常用方法
查看>>
暑期周记8
查看>>
ASP.NET MVC中利用AuthorizeAttribute实现访问身份是否合法以及Cookie过期问题的处理...
查看>>
第七周技术博客
查看>>
maven构建struts工程
查看>>
线性表练习题1
查看>>
ubuntu 14.04 使用 xfce4 的时候,会有图标问题
查看>>
java改时区
查看>>
IBM黑衣小组【转载】
查看>>
ASP.NET基础
查看>>
面向对象程序设计第三单元总结
查看>>
c#读取通达信历史数据的方法
查看>>
IAR常用快捷键和使用小技巧
查看>>