子集和的目标值(codevs 1692)
给定n个整数in和目标值T,求某一非空子集使 子集的元素的和 与 目标值之差 的绝对值最小,元素可重复
第一行为整数n T
n为整数个数,T为目标值
第二行为n个整数in
一个整数d,为差的最小值的绝对值
5 9
1 1 1 4 17
2
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)的更多相关文章
- codevs1669(dfs)子集和目标值
1692 子集和的目标值 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给定n个整数in和目标值T,求某一非空子集 ...
- suseoj 1211: 子集和问题 (dfs)
1211: 子集和问题 时间限制: 1 Sec 内存限制: 128 MB提交: 2 解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 子集和问题的一个实例为<S ...
- 漏掉的账目(用C语言去重)
问题描述: 某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔.如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输 ...
- 算法设计与分析 - AC 题目 - 第 5 弹(重复第 2 弹)
PTA-算法设计与分析-AC原题 - 最大子列和问题 (20分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+, ..., Nj },其中 ≤i ...
- 算法设计与分析 - AC 题目 - 第 2 弹
PTA-算法设计与分析-AC原题7-1 最大子列和问题 (20分)给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 ...
- ACM-Subset sum
题目描述: Subset Sum Tags: 回溯 子集和问题的一个实例为〈 S,t 〉.其中,S={x1 ,x2 ,…, xn }是一个正整数的集合,c是一个正整数.子集和问题判定是否存在S的一个子 ...
- codevs 3152 装箱问题3
装箱问题3 http://codevs.cn/problem/3152/ 题目描述 Description 设有n种物品,记作A1.A2.….An,对应于每个Ai(1<=i<=n)都有一个 ...
- T1553 互斥的数 codevs
http://codevs.cn/problem/1553/ 题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y ...
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
随机推荐
- 转 pygame学习笔记(1)——安装及矩形、圆型画图
http://www.cnblogs.com/xiaowuyi/archive/2012/06/06/2538921.html
- sed练习简记
1. 使用多命令选项-e sed -e 'command1' -e 'command2' -e 'command3' 在/etc/passwd文件中搜索root.nobody或mail [root@s ...
- android开发学习——This support library should not use a different version
http://blog.csdn.net/mvpstevenlin/article/details/55209966 完美解决系列
- 内置函数isinstance和issubclass
1. isinstance(obj,class) 判断对象obj是不是由class生成的对象. class Foo: pass obj=Foo() print(isinstance(obj,Foo)) ...
- Safari兼容之new Date()格式问题
safari浏览器: 故: Safari浏览器应该用‘2017/10/23’来代替‘2017-10-23’ 谷歌浏览器: 谷歌浏览器两种格式都支持
- DELL笔记本安装Ubuntu 14.04
1. 将制作好的USB启动盘插入电脑,按f2进入启动选择选项,选择U盘启动: 进入选择界面后讲光标移动到"install Ubuntu"选项,按'e'进入grub界面,将倒数第二行 ...
- leetcode:single-number-ii(Java位运算)
题目 Given an array of integers, every element appears three times except for one. Find that single on ...
- CAS server 连接mysql的deployerConfigContext.xml配置
1.deployerConfigContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <b ...
- jmeter 连接 sqlite 进行压力测试
- AIX RAC 安装失败完全卸载
1,删除软件安装目录 rm -rf /u01/app 2,删除以下目录内容 rm -rf/tmp/.oracle rm -rf/tmp/* rm -rf/tmp/ora* rm -rf/var/tmp ...