假设所有西瓜重 Asum,所求的是用 Asum / 2 的背包装,最多装下多少。

刚开始用贪心作的,WA。后来用01背包,结果TLE,数据太大。原来用的是深搜!

dfs(int sum, int i) 表示当前装已了 sum,对第 i 个进行决策。

用时1200多MS,不知道大牛们60MS是怎么搞的,泥煤,20倍!以后再优化吧。

代码如下:

#include<iostream>
#include<cstdio>
#include<math.h>
#include<algorithm>
using namespace std;
int a[], Asum, mi;
void dfs(int sum, int i)
{
if(i < ) //西瓜已经试装完,返回
return;
int t = fabs(Asum - * sum); //两兄弟所分西瓜重量之差
if(t < mi)
mi = t;
if( * sum - Asum >= mi) //剪枝,重量之差已大于或等于已求最小值,往后再搜还是大于或等于
return;
dfs(sum + a[i], i - ); //装第 i 个
dfs(sum, i - ); //不装第 i 个
}
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
Asum = ;
mi = ;
for(int i = ; i < n; i ++)
{
scanf("%d", &a[i]);
Asum += a[i];
}
dfs(, n - ); //从什么都不装,对最后一个西瓜决策开始
cout <<mi <<endl;
}
return ;
}

最新文章

  1. Android app开发知识小结
  2. 设为首页 添加到收藏夹 (share)
  3. LINUX btmp 日志(lastb 命令)
  4. Visual Studio 2013 的 Xamarin 安装教程
  5. TQ2440开发板网络配置方式
  6. PLS-00306:错误解决思路 - OracleHelper 执行Oracle函数的坑
  7. GET——token
  8. Windows Phone 8 - 建立App专属联络人资讯(ContactStore)
  9. [2013山东ACM]省赛 The number of steps (可能DP,数学期望)
  10. Openjudge-计算概论(A)-比饭量
  11. [转]使用sklearn进行集成学习——实践
  12. 在Windows上使用Ubuntu共享的打印机
  13. opencv 离线文档下载地址在哪里?
  14. PHP中文关键词匹配
  15. 在GNU/Linux下制作Windows 10安装U盘
  16. 在Apache上http强制跳转到https
  17. 自己总结的C#编码规范--2.命名选择篇
  18. IE6/7 单选按钮 radio 无法选中解决方法
  19. opengl导入obj模型
  20. scala编程第18章学习笔记——有状态的对象

热门文章

  1. debug命令简介
  2. java keytool证书工具使用小结
  3. 使用Carthage管理iOS依赖库
  4. 最近自己封装了个JS脚本,用来创建和操作Table
  5. 使用PS过程
  6. Finder Item脚本如何包装成 Mac App
  7. ajax访问服务器返回json格式
  8. Entity Framework Code First数据库自动更新
  9. [问题]数据库MySQL和Navicat的乱码问题
  10. java多线程详解(8)-volatile,Atomic比较