https://www.luogu.org/problem/P2112
相信都看一眼就知道这是一道很水的dp
但是这代码不是我写的,毕竟我太蒻了
code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 1005
#define MAXK 105
using namespace std;
int n,k;
double a[MAXN],f[MAXN][MAXK];
double s[MAXN];
int main(){
scanf("%d%d",&n,&k);
double ave=0;
for(int i=1;i<=n;i++){
char str[25];
scanf("%s",str);
a[i]=strlen(str);
ave+=a[i];
s[i]=s[i-1]+a[i];
}
ave/=k;
for(int i=1;i<=n;i++)
for(int j=2;j<=k;j++)
f[i][j]=0x7fffffff;
for(int i=1;i<=n;i++) f[i][1]=(s[i]-ave)*(s[i]-ave)/k;
for(int j=2;j<=k;j++)
for(int i=j;i<=n;i++)
for(int l=1;l<=i-1;l++)
f[i][j]=min(f[i][j],f[l][j-1]+(s[i]-s[l]-ave)*(s[i]-s[l]-ave)/k);
printf("%.1lf",f[n][k]);
return 0;
}