求加强版代码【解决给关注】
查看原帖
求加强版代码【解决给关注】
547446
Nevergonna_CCF楼主2022/8/10 23:11

就是把10种配料换成了K种,输入K,N,其他一样

本人的代码(显然有错):

#include<bits/stdc++.h>

using namespace std;
int n,k,cnt=1;
int print[10000][10000];
void dfs(int step,int now,int pnow,int yu){
	//cout<<pnow<<" ";
	if(step>k||now>n) return;
	if(step==k){
        if(yu+1>3)return;
		print[cnt++][k]=yu+1;
	}
	if(n-now<(k-step)) return;
	for(int i = 1; i<=3; i++){
		//cout<<now<<endl;
		print[cnt][step]=i;
		dfs(step+1,now+i,i,n-now-i);
	}
	return;
}
int main(){
	cin>>k>>n;
    if(k*3<n){puts("0");return 0;}
	for(int i = 1; i<=3; i++)
		dfs(1,i,1,n-i-1);
	cout<<cnt-2<<'\n';
	for(int i = 1; i<cnt-1; i++){
		for(int j = 1; j<=k; j++){
			if(!print[i][j]) print[i][j]=print[i-1][j];
			cout<<print[i][j]<<" ";
		}
		puts("");
	}
	return 0;
}
2022/8/10 23:11
加载中...