标签:
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 4946 | Accepted: 2850 |
Description
3 1 2 4
4 3 6
7 9
16
Behind 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