0分错哪了?
查看原帖
0分错哪了?
165039
钟飞越楼主2021/8/22 13:25
#include<bits/stdc++.h>
using namespace std;
int n,k,M=15;
int a[25],dp[25][25];
int ans=-1e9,ansn[25];
void f(int x)
{
	int w = 0;
	if(x==k+1)
	{
		//for(int c=1;c<=k;c++) cout << a[c] << " ";
		//cout << endl;
		memset(dp,0,sizeof(dp));
	    dp[0][0]=1;
    	dp[1][1]=1;
		for(int i=2;i<=M;i++)
		{
			bool flag = 0;
			for(int j=1;j<=n;j++)
			{
				for(int c=1;c<=k;c++)
					if(i-a[c]>=0 && dp[i-a[c]][j-1] == 1)
						dp[i][j]=dp[i-a[c]][j-1];
				if(dp[i][j] == 1) flag = 1;
 			}
			if(flag == 0) 
			{
				w = i - 1;
				break;
			}
		}
		if(w>ans)
		{
			ans=w;
			for(int i=1;i<=k;i++)ansn[i]=a[i];
		} 
		return;
	}
	for(int i=a[x-1]+1;i<=M;i++)
	{
		a[x]=i;
		f(x+1);
	}
}
int main()
{
	cin>>n>>k;
	a[1]=1;
	f(2);
	for(int i=1;i<=k;i++)cout<<ansn[i]<<" ";
	cout<<endl;
	cout<<"MAX="<<ans;
	return 0;
}

//dp[i][j] = dp[i-a[k]][j-1]
                      
2021/8/22 13:25
加载中...