洛谷1118-DFS

题目链接 https://www.luogu.org/problemnew/show/P1118

这道题想了好久,总觉得DFS绝对会超时,但是剪枝没思路。。。看了大佬的源码,才勉勉强强知道这是一道DFS+数论的题目,杨辉三角真的666,性质好多

大佬的解题思路   http://www.pianshen.com/article/4287271386/

最后附上蒟蒻的代码:

 

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdlib>
 4 using namespace std;
 5 int vis[100],a[111],b[1001][1001],sum,n;
 6 void dfs(int cur,int num)
 7 {
 8     int i,j;
 9     //cout<<"num: "<<num<<endl;
10     if(cur>=n||num>=sum)
11     {
12         if(num==sum&&cur==n)
13         {
14             //cout<<endl;
15             for(j=1;j<=n;j++)
16                 cout<<a[j]<<" ";
17                 cout<<endl;
18                 exit(0);
19         }
20         return;
21     }
22     for(i=1;i<=n;i++)
23     {
24         if(!vis[i])
25         {
26             a[cur+1]=i;
27             //cout<<a[cur+1]<<' ';
28             vis[i]=1;
29             dfs(cur+1,num+a[cur+1]*b[n][cur+1]);
30             vis[i]=0;
31         }
32     }
33 }
34 int main()
35 {
36     int i,j;
37     cin>>n>>sum;
38     memset(b,0,sizeof(b));
39     b[1][1]=1;
40     for(i=2;i<=n;i++)
41         for(j=1;j<=i;j++)
42         b[i][j]=b[i-1][j-1]+b[i-1][j];
43         memset(vis,0,sizeof(vis));
44         dfs(0,0);
45 }

DFS还是没学到位啊啊啊

posted @ 2019-05-03 15:24  liter_wave  阅读(121)  评论(0编辑  收藏  举报