ZZULI 1788: 小金刚的宝藏

原创 2015年11月21日 19:31:37

题目地址:点击打开链接

思路:价值和的一半为一个背包,往里面放东西就行了,刚开始输出搞错了,结果用搜索做超时了

AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>

typedef long long ll;
using namespace std;

int value[110];
int dp[100010];

int main()
{
    int t,n;
    int i,j,sum;
    scanf("%d",&t);
    while(t--)
    {
        memset(dp,0,sizeof(dp));
        sum = 0;
        scanf("%d",&n);
        for(i=0; i<n; i++)
        {
            scanf("%d",&value[i]);
            sum += value[i];
        }
        int m = sum / 2;
        for(i=0; i<n; i++)
        {
            for(j=m; j>=value[i]; j--)
            {
                dp[j] = max(dp[j],dp[j-value[i]] + value[i]);
            }
        }
        printf("%d\n",abs(sum-2*dp[m]));
    }
    return 0;
}

超时代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>

typedef long long ll;
using namespace std;

int m,n,sum;
int value[110];
int visit[110];
int flag;

void dfs(int st,int sum1)
{
    int i;
    for(i=st; i<n; i++)
    {
        if(!visit[i])
        {
            if(sum1 + value[i] < m)
            {
                visit[i] = 1;
                dfs(i+1,sum1+value[i]);
                visit[i] = 0;
            }
            if(sum1 + value[i] >= m)
            {
                if(abs(sum-2*(sum1+value[i])) < flag)
                    flag = abs(sum-2*(sum1+value[i]));
                while(value[i] == value[i+1])
                    i++;
            }
        }
    }
}

int main()
{
    int t;
    int i;
    scanf("%d",&t);
    while(t--)
    {
        memset(visit,0,sizeof(visit));
        sum = 0;
        scanf("%d",&n);
        for(i=0; i<n; i++)
        {
            scanf("%d",&value[i]);
            sum += value[i];
        }
        m = sum / 2;
        flag = 10000000;
        dfs(0,0);
        printf("%d\n",flag);
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

ZZULIOJ 1788 小金刚的宝藏 (01背包)

1788: 小金刚的宝藏 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 73  Solved: 21 SubmitStatusWeb ...
  • helloiamclh
  • helloiamclh
  • 2015年11月22日 16:02
  • 311

zzulioj 1788: 小金刚的宝藏 (01背包)

1788: 小金刚的宝藏 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 71  Solved: 19 SubmitStatusWeb Board ...
  • yanghui07216
  • yanghui07216
  • 2015年11月22日 11:26
  • 325

JZOJ 5477. 【NOIP2017提高组正式赛】宝藏

JZOJ 5477. 【NOIP2017提高组正式赛】宝藏 Description 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋,也给出了这 n 个宝藏屋之间可供开...
  • liyizhixl
  • liyizhixl
  • 2017年11月22日 22:30
  • 211

zzuli 1918 (宝藏 + 最大二分匹配 匈牙利算法)

Problem  Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 350  Solved: 82 SubmitStatusWeb Boa...
  • qq_33406883
  • qq_33406883
  • 2016年08月17日 20:06
  • 100

小火山 zzuli 1907 (宝藏)

小火山的宝藏收益    Description      进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通。   每一个房间都有一个价值为Ai的宝藏, 但是每一个房...
  • u012910051
  • u012910051
  • 2016年08月11日 10:58
  • 135

【NOIP2017提高组正式赛】宝藏

Description 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋,也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度。 小明决心亲自前往挖掘所...
  • puppywolf
  • puppywolf
  • 2017年11月22日 20:31
  • 271

Zzuli OJ-----1907小火山的宝藏收益

1907: 小火山的宝藏收益 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 169  Solved: 47 SubmitStatusWeb Bo...
  • blue_hpu
  • blue_hpu
  • 2016年08月11日 15:40
  • 179

【NOIP 模拟题】[T2]宝藏(树形dp)

饮月千尺,寂夜成相思
  • reverie_mjp
  • reverie_mjp
  • 2016年11月14日 20:45
  • 293

NOIP2017 宝藏 题解报告【状压dp】

题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度。 小明决心亲自前往挖掘所有宝藏屋中的宝藏。...
  • qq_38678604
  • qq_38678604
  • 2017年11月19日 10:09
  • 545

zzuli 1907 小火山的宝藏收益

Description      进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通。   每一个房间都有一个价值为Ai的宝藏, 但是每一个房间也都存在一个机关。如果小火...
  • zoro_n
  • zoro_n
  • 2016年09月01日 17:31
  • 117
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ZZULI 1788: 小金刚的宝藏
举报原因:
原因补充:

(最多只允许输入30个字)