# BZOJ 1653 USACO 2006 Feb Backward Digit Sums 全排列

%%% http://www.cnblogs.com/zyfzyf/p/3983584.html

#include <cstdio>
#include <algorithm>
#define rep(i,j,k) for(i=j;i<k;i++)
int main() {
int n, m, i, j, a[10], f[10];
scanf("%d%d", &n, &m);
rep(i,0,n) a[i] = i + 1;
do {
rep(i,0,n) f[i] = a[i];
rep(i,0,n - 1) rep(j,0,n-i) f[j] += f[j + 1];
if (f[0] == m) {
rep(i,0,n - 1) printf("%d ", a[i]);
printf("%d\n", a[n - 1]);
break;
}
} while(std::next_permutation(a, a + n));
return 0;
}


## 1653: [Usaco2006 Feb]Backward Digit Sums

Time Limit: 5 Sec   Memory Limit: 64 MB
Submit: 339   Solved: 253
[ 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

OUTPUT DETAILS:

There are other possible sequences, such as 3 2 1 4, but 3 1 2 4
is the lexicographically smallest.

01-15 24
09-07 20
12-18 94
12-24 1642
09-07 69
08-23 2766
06-15 1万+