RE求助!
查看原帖
RE求助!
807826
zjpwdyf楼主2023/9/29 16:07
#include<bits/stdc++.h>
using namespace std;
const int N=17;
int n,k,a[N],ans,dp[N][N*N];
int solve(int tk){
	memset(dp,0x3f,sizeof(dp));
	dp[0][0]=0;
	for(int i=1;i<=tk;i++){
		for(int j=0;j<=a[i]*n;j++){
			for(int q=0;a[i]*q<=j;q++){
				dp[i][j]=min(dp[i][j],dp[i-1][j-a[i]*q]+q);
			}
		}
	}
	for(int i=1;i<=a[tk]*n+1;i++)
		if(dp[tk][i]>n) return i-1;
	return 0;
}
void dfs1(int x,int rgt){
	ans=max(ans,rgt);
	if(x==k+1) return;
	for(int i=a[i-1]+1;i<=rgt+1;i++){
		a[x]=i;
		dfs1(x+1,solve(x));
		a[x]=0;
	}
	return;
}
void dfs2(int x,int rgt){
	if(rgt==ans){
		for(int i=1;i<x;i++) cout<<a[i]<<' ';
		cout<<"\nMAX="<<ans;
		exit(0);
	}
	if(x==k+1) return;
	for(int i=a[i-1]+1;i<=rgt+1;i++){
		a[x]=i;
		dfs2(x+1,solve(x));
		a[x]=0;
	}
	return;
}
int main(){
	cin>>n>>k;
	dfs1(1,0);
	dfs2(1,0);
	return 0;
}
2023/9/29 16:07
加载中...