Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 3923 | Accepted: 2235 |
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.
Write a program to help FJ play the game and keep up with the cows.
Input
Output
Sample Input
4 16
Sample Output
3 1 2 4
Hint
There are other possible sequences, such as 3 2 1 4, but 3 1 2 4 is the lexicographically smallest.
Source
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=11;
int n,sum,num[maxn],c[maxn];
bool vis[maxn],flag;
int find_c(int a,int n)
{
int i=1,ans=1;
while(i<=a)
{
ans=ans*n/i;
n--;i++;
}
return ans;
}
void dfs(int dep,int val)
{
if(val>sum) return;
if(dep==n)
{
if(val==sum&&!flag)
{
flag=true;
for(int j=0;j<n;j++)
printf("%d ",num[j]);
}
return;
}
for(int j=1;j<=n&&!flag;j++)
{
if(!vis[j])
{
num[dep]=j;
vis[j]=1;
dfs(dep+1,val+c[dep]*j);
vis[j]=0;
}
}
}
int main()
{
scanf("%d%d",&n,&sum);
for(int i=0;i<n;i++)
c[i]=find_c(i,n-1);
dfs(0,0);
return 0;
}