計蒜客NOIP2017提高組模擬賽(三)day2-小區劃分
阿新 • • 發佈:2017-10-28
ant abs set day2 name anti nan turn space
傳送門
dp,註意邊界
1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<map> 7 #include<set> 8 #include<queue> 9 #include<vector> 10 #define INF 0x7f7f7f7f 11 #define pii pair<int,int> 12#define ll long long 13 #define MAXN 805 14 using namespace std; 15 16 int read(){ 17 int x=0,f=1;char ch=getchar(); 18 while(ch<‘0‘||ch>‘9‘){if(‘-‘==ch)f=-1;ch=getchar();} 19 while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} 20 return x*f; 21 } 22 int n,k; 23 doublef[MAXN][85]; 24 double sumA[MAXN],sumB[MAXN]; 25 double cost(int x,int y){ 26 return fabs((sumA[y]-sumA[x-1])-(sumB[y]-sumB[x-1])); 27 } 28 int main() 29 { 30 // freopen("data.in","r",stdin); 31 scanf("%d%d",&n,&k); 32 for(int i=1;i<=n;i++){ 33 double t;scanf("%lf",&t);34 sumA[i]=sumA[i-1]+t; 35 } 36 for(int i=1;i<=n;i++){ 37 double t;scanf("%lf",&t); 38 sumB[i]=sumB[i-1]+t; 39 } 40 for(int i=1;i<=k;i++){ 41 f[0][i]=-10000000; 42 } 43 for(int i=1;i<=n;i++){ 44 f[i][0]=-10000000; 45 } 46 f[0][0]=0; 47 for(int i=1;i<=n;i++){ 48 for(int j=1;j<=k;j++){ 49 for(int q=0;q<i;q++){ 50 f[i][j]=max(f[i][j],f[q][j-1]+cost(q+1,i)); 51 } 52 } 53 } 54 printf("%.6f\n",f[n][k]); 55 return 0; 56 }
計蒜客NOIP2017提高組模擬賽(三)day2-小區劃分