子集和的目标值(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+1,tot);dfs(t+1,tot+v[t]); } int main() {cin>>n;cin>>goal;for(int i=1;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-10){f[0]=1;for(int i=1;i<=n;i++)for(ll j=sum;j>=v[i];j--)if(f[j-v[i]])f[j]=1;for(ll i=0;i<=sum;i++)if(f[i])ans=min(ans,(ll)abs(i-goal));printf("%lld",ans);}else{dfs(1,0);printf("%lld",ans);}return 0; }
View Code
转载于:https://www.cnblogs.com/harden/p/5781102.html
子集和的目标值(codevs 1692)相关推荐
- 实验四: 子集和问题
一.内容 子集和问题的一个实例为<S,c>.其中,S={x1,x2,...,xn}是一个正整数的集合,c是一个正整数.子集和问题判定是否存在S的一个子集S1,使得试设计一个解子集和问题的回 ...
- 【9502】子集问题
Time Limit: 10 second Memory Limit: 2 MB 问题描述 子集和问题的一个实例为〈S,C 〉.其中,S={ X1 ,X2 ,-,Xn } 是一个正整数的集合,C是一个 ...
- 算法分析-子集和数,回溯法
#include <iostream> #include <algorithm>/*题目描述 子集和问题的一个实例为〈S,t〉.其中,S={ 1 x , 2 x ,-, n x ...
- 子集和问题 深搜回溯法
我的哔哩哔哩账号 4.子集和问题 [问题描述] 子集和问题的一个实例为<S,t>.其中,S={ x1,x2,-,xn}是一个正整数的集合,c是一个正整数.子集和问题判定是否 ...
- educoder算法设计与分析 实验五回溯法
实验五 回溯法 第1关:排列 第2关:子集合 第3关:TSP问题 第4关:n皇后问题 第5关:0-1背包 第1关:排列 题目描述: 1.设计算法从前m个大写字母(m≤26)种取出n个字母的所有排列(组 ...
- c语言最短加法链问题回溯法,《回溯法习题》PPT课件.ppt
1,课程安排,第5章 回溯法习题课,3,第5章 回溯法习题,子集和问题 最小长度电路板排列问题 最小重量机器设计问题 运动员最佳匹配问题 无分隔符字典问题 无和集问题 n色方柱问题 整数变换问题 拉丁 ...
- 动态规划: dp+递推——确定动态矩阵dp含义,确定每个状态下面临的选择和对结果值影响,选择符合题意的作为结果存储在dp中
1.动态规划:每一个状态一定是由之前的状态推导出来的,通过总结归纳发现递推关系 2.解决动态规划问题的步骤: 确定dp数组(dp table)以及下标的含义: 每个单元内 题目所求的值,一维.二维 确 ...
- 一本通 搜索与回溯专栏
全排列问题(form.cpp) [问题描述] 输出自然数1 到n 所有不重复的排列,即n 的全排列,要求所产生的任一数字序列中不允许出现重复的 数字. [输入形式] n(1≤n≤9) [输出形式] 由 ...
- sdut算法分析oj题目整合
A-众数问题(分治算法A-D) Description: 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为众数.例如,S={1,2,2,2,3,5} ...
最新文章
- ArcGIS AddIN开发异常之--修饰符“static”对该项无效
- JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情
- Hive常用运算(关系运算)、逻辑运算与数学运算、数值运算、日期函数、条件函数、字符串函数
- python删除空白没有显示_删除Python字符串中的空白
- python中的set和dict_Python中dict和set的用法讲解
- PropertiesUtil 获取文件属性值
- java 设计模式_Java设计模式的常见应用场景
- commix 命令注入获取信息 (好东西)
- J2EE如何生成验证码图片和点击刷新验证码
- 計算機二級-java09
- vue main.js中引入js_手把手教你深入Vue3.0(Vue-cli4)项目打包性能优化实践
- virt-install选项详解
- ubuntu 普通用户下设置tab键自动补全
- J - X and Beasts
- mac 下安装iwork+ps+nx2
- 简谈触摸板程序的实现(一)
- 软件测试方法和技术知识点有哪些?
- IPD开发流程TR1-TR6各个阶段简介
- Flash 3D之旋转文字
- 网络编程之TCP例子一(帅帅老师讲堂)