44分求助,5点后全wa
查看原帖
44分求助,5点后全wa
366595
zty_luogu楼主2021/8/28 21:10
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#define f(III,MMM,NNN) for(register int III=MMM;III<=NNN;III++)
typedef long long int ll;
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3f
const int N=1010;
int dp[510][510]={};
//dp[n][m]前n本书分给m人抄写
int a[510]={},s[510]={}; 
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n,m;
	cin>>n>>m;
	memset(dp,127,sizeof(dp));
	for(int i=1;i<=n;i++)
		cin>>a[i],s[i]=s[i-1]+a[i],
		dp[i][1]=s[i];//一个人抄完 
	for(int i=2;i<=n;i++){//书总数量 
		for(int j=1;j<=m;j++){//人总数量 
			for(int k=1;k<=i-1;k++)//分k~i本给当前人 
				dp[i][j]=min(dp[i][j],max(dp[k][j-1],s[i]-s[k]));
				//"使得复制时间最短"
				//"复制时间为抄写页数最多的人用去的时间"
		}
	} 
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++){
//			cout<<dp[i][j]<<" ";
//		} 
//		cout<<endl;
//	}
	int cnt=0; 
	int j=1;
	for(int i=1;i<=n;i++){
		if(cnt+a[i]<=dp[n][m])
			cnt+=a[i];
		else
			cout<<j<<" "<<i-1<<endl,cnt=a[i],j=i;
		if(i==n)
			cout<<j<<' '<<i<<endl;
	}
	return 0;
}

2021/8/28 21:10
加载中...