码迷,mamicode.com
首页 > 其他好文 > 详细

NY 325 zb的生日

时间:2014-07-17 22:36:47      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   数据   

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

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

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

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

代码如下:

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

NY 325 zb的生日,布布扣,bubuko.com

NY 325 zb的生日

标签:style   blog   http   color   os   数据   

原文地址:http://www.cnblogs.com/Houheshuai/p/3851627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!