61pts求调
  • 板块P10971 Cookies
  • 楼主RAY091016
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/9 16:30
  • 上次更新2025/1/9 20:06:51
查看原帖
61pts求调
772875
RAY091016楼主2025/1/9 16:30

玄关

#include<bits/stdc++.h>
#define int long long
using namespace std;
int m,n,p[100][100],s[100],ans[100],f[100][5050];
struct data{
	int num,g;
}a[100];
bool cmp(data a,data b){
	return a.g>b.g;
}
void solve(int x,int y){
	if(!x){
		return ;
	}
	for(int i=1;i<=x;i++){
		a[i].g++;
	}
	solve(p[x][y],y-x);
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i].g;
		a[i].num=i;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		s[i]=s[i-1]+a[i].g;
	}
	memset(f,0x3f,sizeof f);
	f[0][0]=0;
	for(int i=1;i<=n;i++){
		for(int j=i;j<=m;j++){
			for(int k=0;k<=i;k++){
				int tmp=f[k][j-i]+(s[i]-s[k])*k;
				if(tmp<f[i][j]){
					f[i][j]=tmp,p[i][j]=k;
				}
			}
		}
	}
	cout<<f[n][m]<<endl;
	for(int i=1;i<=n;i++){
		a[i].g=0;
	}
	solve(n,m);
	for(int i=1;i<=n;i++){
		ans[a[i].num]=a[i].g;
	}
	for(int i=1;i<=n;i++){
		cout<<ans[i]<<" ";
	}
	return 0;
}
2025/1/9 16:30
加载中...