题目地址: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. ExecuteNonQuery()的用法

    ExecuteNonQuery()的用法 下面我们将详细讲解如何在Page_Load()中对数据库的增加.删除.修改,最后我们再来总结一下ExecuteNonQuery(),ExecuteScalar ...

  2. 从service启动activity startActivity慢 的解决方案

    Intent intent = new Intent(context, A.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Pendin ...

  3. easyui 生成tas方式

    1.采用<a>标签形式 <div id="tabs" style="width:100%;"> <ul> <li id ...

  4. 1998 NOIP 拼数 string 和sort的新理解

    题目:https://www.luogu.org/problemnew/show/P1012 今天真是长了见识.这道题做了十几分钟,用模拟愣是调不出来.直到我看了题解——(当场去世)…… 题的意思是n ...

  5. E20170602-ts

    questionnaire  n. 调查问卷; 调查表;  アンケート不是英语 collection   n. 征收; 收集,采集; 收藏品; 募捐; association   n. 联想; 协会, ...

  6. PKUACM 2018 D chocolate【并查集+克鲁斯卡尔】

    传送:http://poj.openjudge.cn/practice/C18D/ 依然是课件截图 #include<iostream> #include<cstdio> #i ...

  7. 洛谷2019 3月月赛 T4

    T3做不来.. 直接滚去T4 orz 乍一看 T4是个DP 题干 复杂度??(N^4) 咋优化... 还带一只捆绑 捆绑啥的最烦人了 最后20pts 直接废了 T了 很烦 不过拿到80pts已经很开心 ...

  8. php 页面展示

    php 页面展示 复杂逻辑. 段落注释

  9. 为 C# 代码生成 API 文档(自译)

    原文地址:http://broadcast.oreilly.com/2010/09/build-html-documentation-for-y.html#comments Sandcastle 功能 ...

  10. Spring-security自定义过滤器

    定义过滤器 public class TokenAuthenticationFilter extends AbstractPreAuthenticatedProcessingFilter { publ ...