# bzoj 1653: [Usaco2006 Feb]Backward Digit Sums（全排列）

## 1653: [Usaco2006 Feb]Backward Digit Sums

Time Limit: 5 Sec   Memory Limit: 64 MB
Submit: 502   Solved: 348
[ Submit][ Status][ Discuss]

## Description

FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N <= 10) in a certain order and then sum adjacent numbers to produce a new list with one fewer number. They repeat this until only a single number is left. For example, one instance of the game (when N=4) might go like this: 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. Write a program to help FJ play the game and keep up with the cows.

## Input

* Line 1: Two space-separated integers: N and the final sum.

## Output

* Line 1: An ordering of the integers 1..N that leads to the given sum. If there are multiple solutions, choose the one that is lexicographically least, i.e., that puts smaller numbers first.

4 16

## Sample Output

3 1 2 4

#include<stdio.h>
#include<algorithm>
using namespace std;
int main(void)
{
int n, m, i, j, a, b;
scanf("%d%d", &n, &m);
for(i=1;i<=n;i++)
a[i] = i;
do
{
for(i=1;i<=n;i++)
b[i] = a[i];
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
b[j] += b[j+1];
}
if(b==m)
{
printf("%d", a);
for(i=2;i<=n;i++)
printf(" %d", a[i]);
printf("\n");
break;
}
}while(next_permutation(a+1, a+n+1));
return 0;
}

02-01 8                                                                          03-31 110
08-06 106
07-05 247
07-31 36
03-15 280
05-07 24
01-15 24
09-07 20
09-18 32
12-24 1642
12-18 94
09-07 69
08-23 2766
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客