RE 10pts 玄关
查看原帖
RE 10pts 玄关
1269609
yiwugougou楼主2024/12/27 19:55
#include<bits/stdc++.h>
using namespace std;
const int N=505;
int arr[N][N],c[N][N],dp[N][N];
int n,m,t;
int main(){
    cin>>m>>n;
    for(int i=1;i<m;i++){
        cin>>arr[i][i+1];
    }
    for(int i=1;i<=m;i++){
        for(int j=i+1;j<=m;j++){
            arr[i][j]=arr[i][j-1]+arr[j-1][j];
            arr[j][i]=arr[i][j];
        }
    }
    for(int i=1;i<=m;i++){
        for(int j=i+1;j<=m;j++){
            int mid=(i+j)/2;
            c[i][j]=0;
            for(int k=i;k<=j;k++){
                c[i][j]+=arr[k][mid];
            }
        }
    }
    for(int i=1;i<=m;i++){
        dp[i][1]=c[1][i];
    }
    for(int i=1;i<=m;i++){
        for(int j=2;j<=n;j++){
            dp[i][j]=INT_MAX;
            for(int k=j-1;j<=i;k++){
                dp[i][j]=min(dp[i][j],dp[k][j-1]+c[k+1][i]);
            }
        }
    }
    cout<<dp[m][n];
	return 0;
}
2024/12/27 19:55
加载中...