题解
【入门】石子合并(2)
1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int n; int minn=INT_MAX; int maxx=INT_MIN; int a[805]; int qz[805]; int dp_maxx[805][805]; int dp_minn[805][805]; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ qz[i]=qz[i-1]+a[i]; } for(int len=2;len<=n;len++){ for(int i=1;i+len-1<=n;i++){ int j=i+len-1; dp_maxx[i][j]=INT_MIN; dp_minn[i][j]=INT_MAX; for(int k=i;k<j;k++){ dp_maxx[i][j]=max(dp_maxx[i][j],dp_maxx[i][k]+dp_maxx[k+1][j]+qz[j]-qz[i-1]); dp_minn[i][j]=min(dp_minn[i][j],dp_minn[i][k]+dp_minn[k+1][j]+qz[j]-qz[i-1]); } } } cout<<dp_minn[1][n]<<"\n"<<dp_maxx[1][n]; return 0; }
- 1