P1118-数字三角形

 1 #include <bits/stdc++.h>
 2 #define _for(i,a,b) for(int i = a;i < b;i ++)
 3 #define maxn 20
 4 #define INF 0x3f3f3f3f
 5 using namespace std;
 6 
 7 int n,num;
 8 int b[maxn][maxn];
 9 int a[maxn];
10 void db()
11 {
12     b[0][0] = 1;
13     _for(i,1,15)
14     {
15         b[i][0] = 1;
16         _for(j,1,i)
17         {
18             b[i][j] = b[i-1][j] + b[i-1][j-1];
19         }
20         b[i][i] = 1;
21     }
22 }
23 int main()
24 {
25     scanf("%d%d",&n,&num);
26     memset(a,0,sizeof(a));
27     _for(i,0,n)
28         a[i] = i+1;
29     int flag = 0;
30     db();
31     do
32     {
33         int sumt = 0;
34         _for(i,0,n)
35         {
36             sumt += b[n-1][i]*a[i];
37             if(sumt>num)
38                 break;
39         }
40         if(sumt==num)
41         { 
42             flag = 1; 
43             break;
44         } 
45     }
46     while(next_permutation(a,a+n));
47     if(flag)
48     {
49         _for(i,0,n)
50         printf("%d ",a[i]);
51     }
52     return 0;
53 }

 

posted @ 2019-07-25 17:54  Asurudo  阅读(194)  评论(0编辑  收藏  举报