<div class="ptt" lang="en-US" style="text-align: center; font-size: 18pt; font-weight: bold; color: blue;">Backward Digit Sums</div><div class="plm" style="text-align: center;font-size:14px;"><table align="center"><tbody><tr><td><strong>Time Limit:</strong> 1000MS</td><td width="10px"> </td><td><strong>Memory Limit:</strong> 65536K</td></tr><tr><td><strong>Total Submissions:</strong> 5858</td><td width="10px"> </td><td><strong>Accepted:</strong> 3398</td></tr></tbody></table></div><p class="pst" style="font-size: 18pt; font-weight: bold; color: blue;">Description</p><div class="ptx" lang="en-US" style="font-family: 'Times New Roman', Times, serif;font-size:14px;">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: <pre> 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
再次用到了全排列,next_permutation()的用法!STL!
代码:
<pre name="code" class="html">#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main() { int n,s; int a[20],b[20]; while(~scanf("%d%d",&n,&s)) { for(int i=0;i<n;i++) a[i]=b[i]=i+1; do { for(int i=0;i<n;i++) a[i]=b[i]; for(int j=n;j>0;j--) { for(int k=0;k<j-1;k++) { a[k]=a[k]+a[k+1]; } } if(a[0]==s) { for(int i=0;i<n-1;i++) printf("%d ",b[i]); printf("%d\n",b[n-1]); break; } }while(next_permutation(b,b+n)); } return 0; }