dp题求调
  • 板块灌水区
  • 楼主Martlet
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/4/21 21:37
  • 上次更新2023/10/23 17:52:41
查看原帖
dp题求调
543717
Martlet楼主2023/4/21 21:37

link

#include<bits/stdc++.h>
using namespace std;
int a[100010],s[100010],f[1001][1001],n,m;
void dfs(int l,int r){
	int p = 0;
	for(int i = r;i >= l;i--){
		if(p+a[i]>f[n][m]){
			dfs(1,l);
			cout<<l+1<<" "<<r<<endl;
			return ;
		}
		p += a[i];
	}
	cout<<l<<" "<<r<<endl; 
}
int main(){
	cin>>n>>m;
	for(int i = 1;i <= n;i++){
		cin>>a[i];
		s[i] = s[i-1]+a[i];
		f[i][1] = s[i];
	}
	
	for(int i = 1;i <= n;i++){
		for(int j = 2;j <= m;j++){
			f[i][j] = 1e9;
			if(i < j)continue;//每个人都要干活 
			for(int k = j;k <= i;k++){
				f[i][j] = min(f[i][j],max(f[k-1][j-1],s[i]-s[k-1]));
			}
		}
	}
	dfs(1,n);
} 
2023/4/21 21:37
加载中...