数字三角形

来源:互联网 发布:想学编程从哪里入手 编辑:程序博客网 时间:2024/06/06 18:49

题目
分析一下,不难发现,其实这几个数系数是对应行数杨辉三角形的数(又是这破东西!!!)然后判断一下算出来的数比sum大还是小剪一下枝就行了

#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;int n,k;int a[1000],yh[1000][1000],f[1000];void dfs(int i,int sum){    if(i==k+1)    {        if(sum==n)         {            for(int j=1;j<=k;j++)             printf("%d ",a[j]);             exit(0);        }        return;    }    for(int j=1;j<=k;j++)     if(f[j]==0)      {        f[j]=1;        a[i]=j;        if((sum+j*yh[k][i])<=n) dfs(i+1,sum+j*yh[k][i]);        f[j]=0;      }}int main(){    scanf("%d%d",&k,&n);   yh[1][1]=1;   for(int i=2;i<=k;i++)    for(int j=1;j<=i;j++)     yh[i][j]=yh[i-1][j-1]+yh[i-1][j];    dfs(1,0);    return 0;   
0 0
原创粉丝点击