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