【洛谷】P1118 [USACO06FEB]数字三角形`Backward Digit Su (题解)
P1118 [USACO06FEB]数字三角形`Backward Digit Su`…
第一次看到这个题的感受 :
题解:
#include <bits/stdc++.h>
using namespace std;
int n,sum;
int ha[13],flag,yh[13][13];
bool v[13];
void print()
{
for(int i=1; i<=n; i++)
{
printf("%d ",ha[i]);
}
}
void dfs(int step,int ans)
{
if(ans>sum||flag)
{
return;
}
if(step==n+1&&ans==sum)
{
print();
flag=1;
return;
}
for(int i=1; i<=n; i++)
{
if(!v[i])
{
ha[step]=i;
v[i]=true;
dfs(step+1,ans+i*yh[n][step]);
v[i]=false;
}
}
}
int main()
{
scanf("%d%d",&n,&sum);
yh[1][1]=1;
for(int i=2; i<=n; 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;
}
欢迎拷贝~