• 洛谷 P1118 [USACO06FEB]数字三角形`Backward Digit Su`…


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

    #include<bits/stdc++.h>
    using namespace std;
    int n,sum,h[13],flag,y[13][13];
    bool v[13];//防止重复
    void dfs(int step,int ans)//第step个数,ans为总和
    {
    	if(ans>sum||flag)//超过了sum,flag找到了无需再找了
    		return ;
    	if(step==n+1&&ans==sum)//枚举完了,看看结果是否==sum,是打印出来
    	{
    		for(int i=1;i<=n;i++)
    			cout<<h[i]<<" ";
    		flag=1;//标记
    		return ;
    	}
    	for(int i=1;i<=n;i++)
    		if(!v[i])
    		{
    			h[step]=i;
    			v[i]=1;//找到一个数做上标记
    			dfs(step+1,ans+i*y[n][step]);
    			v[i]=0;//回溯
    		}
    }
    int main()
    {
    	cin>>n>>sum;
    	y[1][1]=1;
    	for(int i=2;i<=n;i++)
    		for(int j=1;j<=i;j++)
    			y[i][j]=y[i-1][j-1]+y[i-1][j];
    	dfs(1,0);
    	return 0;
    }
    
  • 相关阅读:
    1,JAVA图形
    作业(2)
    作业(1)
    作业
    2.15 (第二次作业)
    60页2.6 (第二次作业)
    1.12 (第一次作业)
    27页1.8(第一次作业)
    26页1.3(第一次作业)
    作业第六次
  • 原文地址:https://www.cnblogs.com/yonglin1998/p/11780819.html
Copyright © 2020-2023  润新知