http://codevs.cn/problem/3278/
感觉这题好熟悉的感觉,好像做过,一开始看到题目说的最大值的最小值,一下子懵了,是不是题目错啦,按照自己的理解算了最小值,可是wa感觉这是个坑,用了min里面套max:f[j][i]=min(f[j][i],max(f[j][1]-f[k][1],f[k][i-1]));竟然过啦。不过 不明白这样做的意义何在。
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
int f[1005][1005]={0};
int main()
{
int n,m;
cin >> n>>m;
int a[1005];
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
f[i][1]=f[i-1][1]+a[i];
for(int i=2;i<=m;i++)
{
for(int j=i;j<=n;j++)
{
f[j][i]=9999999;
for(int k=i;k<j;k++)
{
f[j][i]=min(f[j][i],max(f[j][1]-f[k][1],f[k][i-1]));
}
}
}
cout<<f[n][m]<<endl;
return 0;
}