/* dp[i][j] 前i组蛇,用j个网的最小浪费空间 dp[i][j]=min(dp[i][j],dp[m][j-1]+cnt[m+1][i]) dp[i][j]=1e9 dp[0][0]=0 */ #include #include #include #include #include #include using ll = int64_t; #define p2v(dp)do{\ for(ll i=0;i>n>>m; m++; std::vector v(n+1); std::vector> cnt(n+1,std::vector(n+1));//cnt[i][j]=i-j用一个网浪费的空间 std::vector> dp(n+1,std::vector(m+1, 1e9)); dp[0][0]=0; for(ll i=1;i<=n;i++){ std::cin>>v[i]; } for(ll i=1;i<=n;i++){ for(ll j=i;j<=n;j++){ ll nmax = *std::max_element(v.begin()+i,v.begin()+j+1); ll ncnt=0; for(ll m=i;m<=j;m++){ ncnt+=nmax-v[m]; } cnt[i][j]=ncnt; } } // printf("cnt\n"); // p2v(cnt); for(ll i=1;i<=n;i++){ dp[i][1]=cnt[1][i]; for(ll j=2;j<=m&&j<=i;j++){ for(ll k=j-1;k