codevs1048 石子归并 动态规划dp
#include<iostream>
#include<cstring>
using namespace std;
int n,a[1000]={0},dp[1000][1000]={0},s[1000]={0};
int main(){
cin>>n;
memset(dp,11,sizeof(dp));
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=a[i]+s[i-1];
dp[i][i]=0;
}
for(int i=2;i<=n;i++)
for(int j=i-1;j>=1;j--)
for(int k=j;k<i;k++)
dp[j][i]=min(dp[j][i],dp[j][k]+dp[k+1][i]+s[i]-s[j-1]);
cout<<dp[1][n];
}
还没有评论,来说两句吧...