【洛谷】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;
}

欢迎拷贝~

posted @ 2020-02-14 15:07  BorisDimitri  阅读(41)  评论(0编辑  收藏  举报