题目地址:http://www.51cpc.com/web/problem.php?id=4264

  其实一看到这道题我就想到了01背包,但是卡死在了如何顺序输出;

  个人人为回溯本身就会用到搜索,像是充分不必要条件的那种感觉。

  试了下动规的方法,并不适用于此题,动规可以得到是否有解或求出其中一组解,但无法按输入顺序输出第一组解。

Summarize:

  1. 注意特判所有元素加起来都小于C;

  2. 递归内循环从0开始,由于vis不必担心重复;但题目要求顺序输出,故应从0开始;

附AC代码:

 #include<iostream>
#include<cstring>
#define inf 1e9
typedef long long LL;
using namespace std; const int N = 7e3+;
LL n,c;
LL a[N], vis[N], can; void dfs(int i, LL sum)
{
if(can || i>=n) return; if(sum == c)
{
can=;
int i=;
while(!vis[i] && i<n) i++;
cout<<a[i];
for(i++; i<n; i++)
if(vis[i]) cout<<' '<<a[i];
cout<<endl;
return;
} for(int k=; k<n; k++) {
if(sum+a[k]<=c && !vis[k]) {
vis[k] = ;
dfs(k, sum+a[k]);
vis[k] = ;
}
}
} int main()
{
ios::sync_with_stdio(false); while(cin>>n>>c)
{
can=;
LL sum=;
for(int i=; i<n; i++) {
cin>>a[i], vis[i]=;
sum += a[i];
}
if(sum < c) {
cout<<"No Solution!"<<endl;
continue;
}
dfs(,);
if(!can) cout<<"No Solution!"<<endl;
}
}

这里也附上动规的代码,不能AC,但仍未一种想法。

 #include<iostream>
#include<stack>
#include<algorithm>
using namespace std;
const int MAX =
int dp[MAX][MAX];
int p[MAX];
int n,m;
stack<int> goods; int main() {
cin>>m>>n;
for (int i = ; i <= m; i++)
cin >> p[i];
for (int i = ; i <= m; i++) {
for (int j = ; j <= n; j++) {
dp[i][j] = (i == ? : dp[i - ][j]);
if (j >= p[i]) {
dp[i][j] = max(dp[i][j], dp[i - ][j - p[i]] + p[i]);
}
}
} for (int i = m; i > ; i--)
for(int j=;j<=n;j++){
if (dp[i][n] - p[i] == dp[i - ][j]) {
goods.push(p[i]);
n = j;
}
} cout<<goods.top();
goods.pop(); while(!goods.empty()) {
cout<<' '<<goods.top();
goods.pop();
}
cout<<endl;
return ;
}

子集和问题 - 回溯&搜索的更多相关文章

  1. 图的m着色问题 (回溯搜索)

    图的m着色问题 [问题描述]        给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的 ...

  2. UVa 167(八皇后)、POJ2258 The Settlers of Catan——记两个简单回溯搜索

    UVa 167 题意:八行八列的棋盘每行每列都要有一个皇后,每个对角线上最多放一个皇后,让你放八个,使摆放位置上的数字加起来最大. 参考:https://blog.csdn.net/xiaoxiede ...

  3. POJ 1416 Shredding Company 回溯搜索 DFS

    Shredding Company Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6173   Accepted: 3361 ...

  4. Leetcode 52 N-Queens II 回溯搜索

    对于N-Queens的每种情况,回答出每种情况的N-Queens的排列数. l,r和c是每种类型的格子是否有棋子. l判断的是这样的对角线的格子                   r判断的是这样的对 ...

  5. 洛谷1378 油滴扩展 dfs进行回溯搜索

    题目链接:https://www.luogu.com.cn/problem/P1378 题目中给出矩形的长宽和一些点,可以在每个点放油滴,油滴会扩展,直到触碰到矩形的周边或者其他油滴的边缘,求出剩余面 ...

  6. Network Saboteur POJ 2531 回溯搜索

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12886   Accepted: 6187 Description A un ...

  7. 回溯法——n后问题

    问题描述: 在n*n的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于在n*n格的棋盘上放置n个皇后,任何2个皇后不放在同一行 ...

  8. LeetCode入门指南 之 回溯思想

    模板 result = {} void backtrack(选择列表, 路径) { if (满足结束条件) { result.add(路径) return } for 选择 in 选择列表 { 做选择 ...

  9. LeetCode通关:连刷十四题,回溯算法完全攻略

    刷题路线:https://github.com/youngyangyang04/leetcode-master 大家好,我是被算法题虐到泪流满面的老三,只能靠发发文章给自己打气! 这一节,我们来看看回 ...

随机推荐

  1. Robot Framework 初学者上手资料

    首先要声明一下这是从http://www.cnblogs.com/yufeihlf/p/5949984.html拷贝的. 在这里只是自己的一个笔记,方便日后添加.修改内容. 总结下Robot Fram ...

  2. ASP.NET Core开发Docker部署

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  3. 【附论文】Facebook推面部识别软件 精准度高达97.25%

    论文下载链接:http://pan.baidu.com/s/1gd86HXp 以下转载自36kr. 认脸对于人来说不是什么难事,除非是韩国小姐才需要最强大脑.但是计算机做同样的事情就要困难得多了.不过 ...

  4. java 基础 —— 文件操作(File)

    1. 基本成员: File.separator public class File implements Serializable, Comparable<File> { private ...

  5. 【JSOI 2008】 最小生成树计数

    [题目链接] 点击打开链接 [算法] 笔者做这题参考了这篇博客 : https://blog.sengxian.com/solutions/bzoj-1016 推荐阅读 首先,我们需要知道三个定理 : ...

  6. MSD6A628开发资料与技术支持

    MSD6A628VX/VXM是mstar推出的低成本安卓智能网络电视方案,628分两个版本,一个是内置512MB内存,一个是外挂1G内存, 安卓4.4系统,4核A7处理器,Mali450MP2 GPU ...

  7. bzoj4407

    http://www.lydsy.com/JudgeOnline/problem.php?id=4407 以前写过一次线性筛 发现不是很理解 写了个欧拉筛的 t了 其实每次推式子,都会先推出一组的解法 ...

  8. 15.extjs tabPanel的用法

    转自:https://blog.csdn.net/mezhaha/article/details/78878894 本文导读:TabPanel继承于Ext.Panel,Ext.TabPanel就是有选 ...

  9. MogileFS介绍

    MogileFS介绍 MogileFS 是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发. Danga团队开发了包括 Memcached.Mog ...

  10. js原始数据类型和引用数据类型=>callback数据传输原理

    摘要:js的数据类型有种划分方式为 原始数据类型和 引用数据类型. 原始数据类型 存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置.栈区包括了 变量的标识符和变量的值. ...