POJ-3187 Backward Digit Sums (暴力枚举)
http://poj.org/problem?id=3187
给定一个个数n和sum,让你求原始序列,如果有多个输出字典序最小的。
暴力枚举题,枚举生成的每一个全排列,符合即退出。
dfs版:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <cstring>
#include <string>
#include <algorithm>
#include <string>
#include <set>
#include <functional>
#include <numeric>
#include <sstream>
#include <stack>
//#include <map>
#include <queue> #define CL(arr, val) memset(arr, val, sizeof(arr)) #define ll long long
#define inf 0x7f7f7f7f
#define lc l,m,rt<<1
#define rc m + 1,r,rt<<1|1
#define pi acos(-1.0) #define L(x) (x) << 1
#define R(x) (x) << 1 | 1
#define MID(l, r) (l + r) >> 1
#define Min(x, y) (x) < (y) ? (x) : (y)
#define Max(x, y) (x) < (y) ? (y) : (x)
#define E(x) (1 << (x))
#define iabs(x) (x) < 0 ? -(x) : (x)
#define OUT(x) printf("%I64d\n", x)
#define lowbit(x) (x)&(-x)
#define Read() freopen("a.txt", "r", stdin)
#define Write() freopen("dout.txt", "w", stdout);
#define maxn 1000000000
#define N 1010
using namespace std; int n,sum,flag;
int pos[],num[],cnt[],vis[]; bool solve()
{
for(int i=;i<=n;i++) num[i]=pos[i];
for(int i=n;i>;i--)
{
for(int j=;j<i;j++)
num[j]=num[j]+num[j+];
}
if(num[]==sum) return true;
return false;
}
void dfs(int k)
{
if(flag) return;
if(k==n+)
{
if(solve())
{
for(int i=;i<=n;i++)
if(i==n) printf("%d\n",pos[i]);
else printf("%d ",pos[i]);
flag=;
return;
}
}
for(int i=;i<=n;i++)
{
if(!vis[i])
{
pos[k]=i;
vis[i]=;
dfs(k+);
vis[i]=;
}
}
return;
}
int main()
{
//freopen("a.txt","r",stdin);
// freopen("b.txt","w",stdout);
scanf("%d%d",&n,&sum);
memset(vis,,sizeof(vis));
flag=;
dfs();
return ;
}
stl版:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,sum,pos[]; bool check()
{
int dp[];
for(int i=;i<=n;i++)
dp[i]=pos[i];
for(int i=n;i>;i--)
{
for(int j=;j<i;j++)
{
dp[j]=dp[j]+dp[j+];
}
}
if(dp[]==sum) return true;
return false;
} void pri()
{
for(int i=;i<=n;i++)
if(i==n) printf("%d\n",pos[i]);
else printf("%d ",pos[i]);
}
void dfs()
{
for(int i=;i<=n;i++)
pos[i]=i;
do {
if(check()) {pri();break;}
}while(next_permutation(pos+,pos+n+));
}
int main()
{
scanf("%d%d",&n,&sum);
dfs();
return ;
}
POJ-3187 Backward Digit Sums (暴力枚举)的更多相关文章
- POJ 3187 Backward Digit Sums 枚举水~
POJ 3187 Backward Digit Sums http://poj.org/problem?id=3187 题目大意: 给你一个原始的数字序列: 3 1 2 4 他可以相邻 ...
- 穷竭搜索:POJ 3187 Backward Digit Sums
题目:http://poj.org/problem?id=3187 题意: 像这样,输入N : 表示层数,输入over表示最后一层的数字,然后这是一个杨辉三角,根据这个公式,由最后一层的数,推出第一行 ...
- POJ 3187 Backward Digit Sums
暴力DFS+验证. 验证如果是暴力检验可能复杂度会太高,事实上可以o(1)进行,这个可以o(n*n)dp预处理. #include<cstdio> #include<cstring& ...
- poj 3187 Backward Digit Sums(穷竭搜索dfs)
Description FJ and his cows enjoy playing a mental game. They write down the numbers to N ( <= N ...
- POJ 3187 Backward Digit Sums (递推,bruteforce)
第1行j列的一个1加到最后1行满足杨辉三角,可以先推出组合数来 然后next_permutation直接暴. #include<cstdio> #include<iostream&g ...
- POJ 3187 Backward Digit Sums (dfs,杨辉三角形性质)
FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N < ...
- Backward Digit Sums(暴力)
Backward Digit Sums Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5664 Accepted: 32 ...
- Backward Digit Sums(POJ 3187)
Backward Digit Sums Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5495 Accepted: 31 ...
- 【POJ - 3187】Backward Digit Sums(搜索)
-->Backward Digit Sums 直接写中文了 Descriptions: FJ 和 他的奶牛们在玩一个心理游戏.他们以某种方式写下1至N的数字(1<=N<=10). 然 ...
- BZOJ1653: [Usaco2006 Feb]Backward Digit Sums
1653: [Usaco2006 Feb]Backward Digit Sums Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 207 Solved: ...
随机推荐
- ACM--South Pacific 2012
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=5 ...
- yii无限极分类
/** * 获取菜单Tree * * @return multitype: */ public function getMenuAllList() { $resArr = $this->getT ...
- C编译错误解决方法
1.expected identifier before numeric constant 一般情况下是枚举类型中的某个变量已经被#define定义过一次了,在项目空间中搜索你枚举类型中的所有变量类型 ...
- NGUI 实现 透明底图遮罩 && 人物像素变黑
今天 UI 那边要求实现一个 透明底图遮罩 与 变黑 的效果. 刚开始考虑使用 shader 实现一个 网上搜了一下,发现了这个,但是底图需要不透明才行,不然他会把 底图的不遮罩部分的透明部分 进行颜 ...
- unity3d中dllimport方法的使用,以接入腾讯平台为例!!!
说到有关dllimport方法可能还有很多人比较陌生,其实我自己也说不太清楚,大概说说什么时候要用它. 事实上功能类似于调用android的第三包,我们想要使用苹果上特定的api或者第三方平台的一些东 ...
- Webpack教程二
Webpack教程一 开发技巧 启用source-map 现在的代码是合并以后的代码,不利于排错和定位,只需要在config中添加 ... devtool: 'eval-source-map', .. ...
- Fiddler手机抓包工具如何设置过滤域名?
fiddler手机抓包工具如何设置过滤域名?如题.fiddler抓包可以完成我们移动开发者的调试测试需求.所以说抓包尤其重要,但是多余的网页请求和手机的其他链接影响我们手机开发的需求.下面我教大家怎么 ...
- MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-4]
引入Hibernate 在pom.xml中加入jar包引用 <!-- hibernate4 --> <dependency> <groupId>org.hibern ...
- 【LA3942-Remember the word 】Trie
http://acm.hust.edu.cn/vjudge/problem/22109 题意:给定n个单词,一个字符串,问把这个字符串划分为若干个单词的连接(单词可重复使用)有多少种方案(mod200 ...
- 《jQuery风暴》第2章 必须知道的JavaScript知识
第2章 必须知道的JavaScript知识 JavaScript是jQuery应用的基础,掌握JavaScript这门语言是使用jQuery的基础条件.本章不会全面细致的讲解JavaScript的全部 ...