POJ3187---Backward Digit Sums
2015-03-10 15:06
302 查看
题目大意:给出杨辉三角的行数N,和顶端值M,求最底层1~N怎样排列才能使顶端值M。输出字典序最小的组合
分析:先求杨辉三角底层各个数的系数,然后,DFS就可以得到答案
代码:
分析:先求杨辉三角底层各个数的系数,然后,DFS就可以得到答案
代码:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int a[15], n, cur, k, flag, vis[15], c[15][15]; void dfs() { if(k == n+1) { int res = 0; for(int i = 1; i <= n; i++) { res = res + c [i] * a[i]; //得到的排列分别乘以相应系数后相加 } if(res == cur) { for(int i = 1; i < n; i++) printf("%d ", a[i]); printf("%d\n", a ); flag = 1; //找到字典序最小后,及时退出,以免超时 } return; } for(int i = 1; i <= n; i++) { if(flag) return; if(!vis[i]) { a[k++] = i; vis[i] = 1; dfs(); vis[i] = 0; k--; } } } int main() { scanf("%d%d", &n, &cur); memset(vis, 0, sizeof(vis)); memset(c, 0, sizeof(c)); c[0][0] = 1; for(int i = 1; i <= n; i++) //求杨辉三角底层的系数 for(int j = 1; j <= i; j++) c[i][j] = c[i-1][j-1] + c[i-1][j]; k = 1; flag = 0; dfs(); return 0; }
相关文章推荐
- POJ3187 Backward Digit Sums 枚举
- Backward Digit Sums(poj3187)(STL next_permutation运用)
- POJ3187 Backward Digit Sums 【暴搜】
- POJ3187 Backward Digit Sums【全排列】
- poj3187 Backward Digit Sums
- POJ3187 Backward Digit Sums
- 【穷竭】POJ3187-Backward Digit Sums
- POJ3187-Backward Digit Sums
- POJ3187 Backward Digit Sums 【暴搜】
- poj3187 Backward Digit Sums
- POJ3187 Backward Digit Sums
- POJ3187-Backward Digit Sums-穷竭搜索
- POJ3187 Backward Digit Sums
- poj3187-Backward Digit Sums(枚举全排列)
- poj3187 Backward Digit Sums(枚举)
- 【暑假复习】【搜索】POJ3187:Backward Digit Sums
- POJ3187 Backward Digit Sums 【暴搜】杨辉三角
- poj3187 Backward Digit Sums---dfs暴力枚举
- poj3187 Backward Digit Sums
- poj 3187 Backward Digit Sums