标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 4946 | Accepted: 2850 |
Description
3 1 2 4 4 3 6 7 9 16Behind FJ‘s back, the cows have started playing a more difficult game, in which they try to determine the starting sequence from only the final total and the number N. Unfortunately, the game is a bit above FJ‘s mental arithmetic capabilities.
Input
Output
Sample Input
4 16
Sample Output
3 1 2 4
Hint
Source
//基本的思路枚举所有的n的数字的组合, //当遇到和等于m的时候就输出。 //这里有一个处理就是每次都是从最小的开始枚举, //因此所选出来的也就是按照字典序最小的, #include<iostream> #include<algorithm> #include<cstdio> using namespace std; //把读入的数字进行处理 inline int read() { int x = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); } return x * f; } int a[15], f[15]; int n, m; int main() { n = read(); m = read(); //初始化数组,设定大小 for(int i = 1; i <= n; i++) a[i] = i; //全排列 do { //现将值赋给f[]; for(int i = 1; i <= n; i++) f[i] = a[i]; //接着求杨辉三角的方式,依次两两相加 for(int i = 1; i < n; i++) for(int j = 1; j <= n - i; j++) f[j] += f[j + 1]; //判断是否等于所给定的结果 if(f[1] == m) { for(int i = 1; i < n; i++) cout<<a[i]<<" "; cout<<a[n]<<endl; return 0; } }while(next_permutation(a + 1,a + n + 1)); return 0; }
Backward Digit Sums --- DFS+全排列
标签:
原文地址:http://blog.csdn.net/u012965373/article/details/45641959