1. 程式人生 > >洛谷P1118 [USACO06FEB]數字三角形 DFS+楊輝三角

洛谷P1118 [USACO06FEB]數字三角形 DFS+楊輝三角

看了解題才知道係數跟楊輝三角有關...

楊輝三角,是二項式係數在三角形中的一種幾何排列。

比如n=4時,假設答案是a,b,c,d,那麼滿足a*1+b*2+c*2+d*1==sum(1,2,2,1是楊輝三角的第三行)

這樣的話直接搜尋就好了

#include<iostream>
using namespace std;
int yh[13][13];//楊輝三角
int n,sum,flag;
int a[13],book[13],ans[13];//book是標記陣列,a[]是1到n的陣列 
void creat()
{
    int i,j;
    for
(i=1;i<=n;i++) { yh[i][1]=1; yh[i][i]=1; for(j=2;j<=i-1;j++) yh[i][j]=yh[i-1][j-1]+yh[i-1][j]; } }//1到12的二項展開式係數 void dfs(int x,int summ) { int i; if(summ==sum&&flag==0&&x==n) { for(i=1;i<=n;i++)cout<<ans[i]<<"
"; flag=1; return; } if(flag==1)return; if(summ>sum)return;//不加這一句就會TLE for(i=1;i<=n;i++) { if(book[i]==0) { book[i]=1; ans[x+1]=a[i]; dfs(x+1,summ+a[i]*yh[n][x+1]); book[i]=0; } } } int
main() { cin>>n>>sum; for(int i=1;i<=n;i++)a[i]=i;//初始化a[i]陣列 creat(); dfs(0,0); }
View Code