问题标题: 酷町堂:6134:填数游戏

0
0
已解决
姚天宇
姚天宇
高级光能
高级光能

6134   填数游戏

60分:

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
using namespace std;
long long n,m,a[15][15];//a表示填的数 
/*
3  1  2  4
0  4  3  6
0  0  7  9
0  0  0 16
*/
bool f[1000001];
void dfs(int x){//填的是第几个数 
	if(x==n+1){//如果n个数填完
		/*
		递归:
			边界:a[1][1]~a[1][n] 
			状态转移方程:a[i][j]=a[i-1][j]+a[i-1][j-1]
			目标:a[n][n] 
		*/
		for(int i=2;i<=n;i++){
			for(int j=2;j<=n;j++){
				a[i][j]=a[i-1][j]+a[i-1][j-1];//状态转移方程
			}
		}
		if(a[n][n]==m){//a[n][n]是这n个数经过流程得到的和,判断和是不是m 
			//找到1组解,并且字典序最小
			//输出&&结束程序
			for(int i=1;i<=n;i++){
				cout<<a[1][i]<<" ";
			}
			exit(0);//结束程序 
		}
		return ;
	}
	for(int i=1;i<=10;i++){//填的数是1~10(不确定) 
		if(f[i]==0){//当前数没有被填 
			//搜索 
			a[1][x]=i;//填数 
			f[i]=1;//当前数设置状态为填过 
			dfs(x+1);//填下一个数
			//回溯 
			a[1][x]=0;	
			f[i]=0; 
		}
	}
}
int main(){
	cin>>n>>m;
	dfs(1);//从第1行开始填 
	return 0;
}

注释加了,样例对了,60分了

…………………………………………………………………………

姚天宇在2023-09-23 20:27:40追加了内容

送豆,乙解决


0
0
我要回答