2个点WA了……
查看原帖
2个点WA了……
658786
STUDENT00楼主2022/9/7 19:56

这个代码看似没有问题,其实很有问题。(O_O)?

#include<bits/stdc++.h>
using namespace std;
int n,k,a[20],it[20],dp[2010],maxs;
int work(int k,int sum){
	memset(dp,127,sizeof(dp));
	dp[0]=0;
	for(int i=1;i<=k;i++){
		for(int j=a[i];j<=n*sum;j++) dp[j]=min(dp[j],dp[j-a[i]]+1);
	}
	for(int i=1;i<=n*sum;i++){
		if(dp[i]>n) return i-1;
	}
	return n*sum;
}
void dfs(int now,int sum){
	if(now>k){
		int s=work(k,sum);
		if(s>maxs){
			maxs=s;
			for(int i=1;i<=k;i++) it[i]=a[i];
		}
		return;
	}
	int s=work(now,sum);
	for(int i=a[k-1]+1;i<=s+1;i++){
		a[now]=i;
		dfs(now+1,sum+i);
	}
}
int main(){
	scanf("%d%d",&n,&k);
	a[1]=1;
	dfs(2,1);
	for(int i=1;i<=k;i++) printf("%d ",it[i]);
	printf("\nMAX=%d",maxs);
	return 0;
}
2022/9/7 19:56
加载中...