问题标题: 酷町堂:1053 最佳调度问题

0
0
已解决
武奕楷
武奕楷
新手天翼
新手天翼
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[7],z[21],n,m,maxn; 
bool cmp(int a,int b){
	return a>b;
} 
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>z[i];
	sort(z+1,z+n+1,cmp);
	for(int i=1;i<=min(m,n);i++){
		a[i]+=z[i];
		maxn=max(maxn,a[i]);
	}
	for(int i=m+1;i<=n;i++){
		int d,minn=0x3f3f3f3f;
		for(int j=1;j<=m;j++){
			if(a[j]<minn){
				d=j;
				minn=a[j];
			}
		}
		a[d]+=z[i];
		maxn=max(maxn,a[d]);
	}
	cout<<maxn;
	return 0;
}

WA10分

请问为什么错了?

武奕楷在2021-09-23 13:06:40追加了内容

顶!


0
已采纳
李显晨
李显晨
中级启示者
中级启示者
全局:
int n, k, a[30], mach[30];
int ans = 0x3f3f3f3f;
bool cmp(int a, int b){
    return a > b;
}
void dfs(int step, int Max){
    if(Max>=ans) return;
    if(step==n+1){
        if(Max<ans)
            ans=Max; 
        return;
    }
    if(Max>ans) return;
    for(int i=1;i<=k;i++){
        if(mach[i]+a[step]>ans) continue; 
        mach[i]+=a[step];
        dfs(step+1,max(Max, mach[i]));
        mach[i]-=a[step];
    }
 }
主函数:
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a + 1, a + n + 1, cmp); 
mach[1]+=a[1];
dfs(2, a[2]);
printf("%d",ans);

 

0
武奕楷
武奕楷
新手天翼
新手天翼

顶!!!!!!!!!!!!!!!!

0
我要回答