计蒜客NOIP2017提高组模拟赛(三)day2-小区划分

时间:2023-03-09 06:30:39
计蒜客NOIP2017提高组模拟赛(三)day2-小区划分

传送门

dp,注意边界

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<queue>
#include<vector>
#define INF 0x7f7f7f7f
#define pii pair<int,int>
#define ll long long
#define MAXN 805
using namespace std; int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if('-'==ch)f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,k;
double f[MAXN][];
double sumA[MAXN],sumB[MAXN];
double cost(int x,int y){
return fabs((sumA[y]-sumA[x-])-(sumB[y]-sumB[x-]));
}
int main()
{
// freopen("data.in","r",stdin);
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++){
double t;scanf("%lf",&t);
sumA[i]=sumA[i-]+t;
}
for(int i=;i<=n;i++){
double t;scanf("%lf",&t);
sumB[i]=sumB[i-]+t;
}
for(int i=;i<=k;i++){
f[][i]=-;
}
for(int i=;i<=n;i++){
f[i][]=-;
}
f[][]=;
for(int i=;i<=n;i++){
for(int j=;j<=k;j++){
for(int q=;q<i;q++){
f[i][j]=max(f[i][j],f[q][j-]+cost(q+,i));
}
}
}
printf("%.6f\n",f[n][k]);
return ;
}