一本通过了,但洛谷90分
查看原帖
一本通过了,但洛谷90分
1029495
cmask4869楼主2024/3/24 20:30

rt,求调

#include<bits/stdc++.h>
using namespace std ;

const int N=505 ;
int a[N],s[N],dp[N][N],cost[N][N] ;
int main(){
	int n,m ;
	cin >> m >> n ;
	for (int i=1 ; i<m ; i++){
		cin >> a[i] ;
		s[i]=s[i-1]+a[i] ; //求前缀和 
	}
	for (int i=1 ; i<=m ; i++){
		for (int j=i+1 ; j<=m ; j++){
			int mid=i+j>>1 ;
			for (int k=i ; k<=j ; k++){
				if (mid<k)
					cost[i][j]+=s[k-1]-s[mid-1] ;
				else
					cost[i][j]+=s[mid-1]-s[k-1] ;	
			}
		}
	}
	memset(dp,0x3f,sizeof(dp)) ;
	for (int i=1 ; i<m ; i++){
		dp[i][1]=cost[1][i] ;
		dp[i][i]=0 ;
	}
	for (int i=2 ; i<=m ; i++){
		for (int j=2 ; j<i && j<=n ; j++){
			for (int k=j-1 ; k<i ; k++){
				dp[i][j]=min(dp[i][j],dp[k][j-1]+cost[k+1][i]) ;
			}
		}
	}
	cout << dp[m][n] ;
	return 0 ;
}
2024/3/24 20:30
加载中...