提交时间:2024-05-25 16:04:07

运行 ID: 149094

#include<bits/stdc++.h> using namespace std; const int N=600; #define dp(i,j) dp[(i)%2][j] int n,K,dp[3][N],b[N]; int main(){ cin>>n>>K; for(int i=1;i<=n;i++){ bool l; cin>>l; b[i]=b[i-1]+l; } for(int i=0; i<2; i++) for(int j=i+1; j<501; j++) dp[i][j]=1<<30; for(int i=1;i<=K;i++){ for(int j=1;j<=n-K+i;j++){ for(int k=i-1;k<j;k++)dp(i,j)=min(dp(i,j),dp(i-1,k)+(b[j]-b[k])*(j-k-(b[j]-b[k]))); } } cout<<dp(K,n); }