题目描述 Description

给定n个整数in和目标值T,求某一非空子集使 子集的元素的和 与 目标值之差 的绝对值最小,元素可重复

输入描述 Input Description

第一行为整数n T

n为整数个数,T为目标值

第二行为n个整数in

输出描述 Output Description

一个整数d,为差的最小值的绝对值

样例输入 Sample Input

5 9

1 1 1 4 17

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

1<=n<=101

0<=T<=2147483647

0<=in<=2147484647

放心,n很大的时候数据都很弱…

/*
这个题纯用背包做会超空间的,因为目标值太大了,而且题目说目标值大的时
候n会很小,所以分情况讨论,当目标值很大时,用dfs,否则用背包
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#define ll long long
#define M 10000010
#define N 110
using namespace std;
bool f[M];
ll n;
ll sum,ans,v[M],goal;
void dfs(int t,ll tot)
{
ans=min(ans,(ll)abs(tot-goal));
if(t>n)return;
if(goal<tot)return;
dfs(t+,tot);
dfs(t+,tot+v[t]);
}
int main()
{
cin>>n;cin>>goal;
for(int i=;i<=n;i++)
cin>>v[i],sum+=(ll)v[i];
ans=sum;
if(sum<=goal)printf("%lld",(ll)abs(sum-goal));
else if(sum<=M-)
{
f[]=;
for(int i=;i<=n;i++)
for(ll j=sum;j>=v[i];j--)
if(f[j-v[i]])f[j]=;
for(ll i=;i<=sum;i++)
if(f[i])ans=min(ans,(ll)abs(i-goal));
printf("%lld",ans);
}
else
{
dfs(,);
printf("%lld",ans);
}
return ;
}

子集和的目标值(codevs 1692)的更多相关文章

  1. codevs1669(dfs)子集和目标值

    1692 子集和的目标值  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 给定n个整数in和目标值T,求某一非空子集 ...

  2. suseoj 1211: 子集和问题 (dfs)

    1211: 子集和问题 时间限制: 1 Sec  内存限制: 128 MB提交: 2  解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 子集和问题的一个实例为<S ...

  3. 漏掉的账目(用C语言去重)

    问题描述: 某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔.如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输 ...

  4. 算法设计与分析 - AC 题目 - 第 5 弹(重复第 2 弹)

    PTA-算法设计与分析-AC原题 - 最大子列和问题 (20分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+, ..., Nj },其中 ≤i ...

  5. 算法设计与分析 - AC 题目 - 第 2 弹

    PTA-算法设计与分析-AC原题7-1 最大子列和问题 (20分)给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 ...

  6. ACM-Subset sum

    题目描述: Subset Sum Tags: 回溯 子集和问题的一个实例为〈 S,t 〉.其中,S={x1 ,x2 ,…, xn }是一个正整数的集合,c是一个正整数.子集和问题判定是否存在S的一个子 ...

  7. codevs 3152 装箱问题3

    装箱问题3 http://codevs.cn/problem/3152/ 题目描述 Description 设有n种物品,记作A1.A2.….An,对应于每个Ai(1<=i<=n)都有一个 ...

  8. T1553 互斥的数 codevs

    http://codevs.cn/problem/1553/ 题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y ...

  9. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

随机推荐

  1. List与类之间的运用,即与javabean的应用

    package com.wh.Object; public class Goods { private String name; private double price; private int n ...

  2. 移动端UI自动化Appium测试——Appium server两种启动方式

    执行自动化测试之前,需要先运行appium server,这样才能形成server与java client的通信,启动server有两种方式,一种是命令,一种是按钮图标,具体使用如下: 1.用命令启动 ...

  3. 4 Visual Effects 视觉效果 读书笔记 第四章

    4   Visual Effects    视觉效果        读书笔记 第四章 Well, circles and ovals are good, but how about drawing r ...

  4. java实现的单点登录

    摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO ...

  5. github——团队合作

  6. JDK1.8中的Stream详解

    Stream简介 Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 XML ...

  7. windows测试物理网络

    ping 192.168.10.88 -t ,参数-t是等待用户去中断测试 

  8. Flask框架 之上下文、请求钩子与Flask_Script

    一.上下文 请求上下文:request与session 应用上下文:current_app与g:一次请求多个函数可以用它传参 @app.route("/") def index() ...

  9. js模拟支付宝发送短信验证码&&&&短信倒计时

    html <div class="pwdContent"> <div class="pwdBox"></div> <d ...

  10. [Algorithm] 2. Trailing Zeros

    Description Write an algorithm which computes the number of trailing zeros in n factorial. Example 1 ...