[挑战程序设计竞赛] POJ 3187 - Backward Digit Sums
2014-11-29 22:41
274 查看
题意:
给定数字N和Sum。求由1~N的组合成的序列按题目的方式求和等于Sum。如果解有很多,输出字典序最小的解。题目保证输入数据一定有解。
不多说啦,DFS裸题,然后用类似杨辉三角的方式求和即可。。之前用队列模拟的求和。。结果TLE了。。然后改成二维数组方式求和了。。
给定数字N和Sum。求由1~N的组合成的序列按题目的方式求和等于Sum。如果解有很多,输出字典序最小的解。题目保证输入数据一定有解。
不多说啦,DFS裸题,然后用类似杨辉三角的方式求和即可。。之前用队列模拟的求和。。结果TLE了。。然后改成二维数组方式求和了。。
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <algorithm> #include <iostream> #include <set> #include <map> #include <queue> #include <stack> #include <assert.h> #include <time.h> //#define _Test typedef long long LL; const int INF = 500000001; const double EPS = 1e-9; const double PI = acos(-1.0); using namespace std; int a[10][11], flag, n, s; bool vis[11]; bool check() { for(int i = 1; i < n; i++) { for(int j = 0; j < n-i; j++) { a[i][j] = a[i-1][j] + a[i-1][j+1]; } } return a[n-1][0] == s; } void dfs(int deep) { if(deep == n && check() && flag) { flag = 0; for(int i = 0; i < n; i++) { printf(i?" %d":"%d", a[0][i]); } puts(""); return ; } for(int i = 1; i <= n; ++i) { if(flag && vis[i]) { vis[i] = false; a[0][deep] = i; dfs(deep + 1); vis[i] = true; } } } int main() { #ifdef _Test freopen("test0.in", "r", stdin); freopen("test0.out", "w", stdout); srand(time(NULL)); #endif while(~scanf("%d %d", &n, &s)) { flag = 1; memset(vis, true, sizeof(vis)); dfs(0); } return 0; }
相关文章推荐
- 挑战2.1 Backward Digit Sums(POJ 3187)
- ACM Backward Digit Sums(挑战程序设计竞赛)
- POJ 3187 Backward Digit Sums (杨辉三角,穷竭搜索,组合数,DFS)
- poj 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums
- POJ 3187 Backward Digit Sums 暴力 杨辉三角
- poj-3187-Backward Digit Sums
- poj Backward Digit Sums 3187 (全排列)
- poj 3187 Backward Digit Sums
- POJ 3187 - Backward Digit Sums
- poj 3187 Backward Digit Sums
- poj 3187 Backward Digit Sums
- poj 3187 Backward Digit Sums(穷竭搜索dfs)
- poj 3187 Backward Digit Sums(暴力)
- Backward Digit Sums POJ - 3187(next_permutation全排列)
- POJ 3187 Backward Digit Sums 枚举水~
- poj 3187 Backward Digit Sums(dfs暴搜)
- POJ 3187 Backward Digit Sums(dfs)
- 【POJ】[3187]Backward Digit Sums
- POJ 3187-Backward Digit Sums【全排列+找规律】