学霸题,数石子,石子怎么数,用dp数
2024-08-26 11:24:05
发布于:上海
5阅读
0回复
0点赞
#include<iostream>
using namespace std;
#define fastcio ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
const int N=2005;
int a[N],sum[N];
int dpt[N][N],dpl[N][N],dps[N][N];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i+n]=a[i];
sum[i]=sum[i-1]+a[i];
dps[i][i]=i;
}
for(int i=n+1;i<=n*2;i++){
sum[i]=sum[i-1]+a[i];
dps[i][i]=i;
}
for(int i=n*2-1;i;i--){
for(int j=i+1;j<=n*2;j++){
int t=0,temp=1919810;
dpt[i][j]=max(dpt[i][j-1],dpt[i+1][j])+sum[j]-sum[i-1];
for(int k=dps[i][j-1];k<=dps[i+1][j];k++){
int tt=dpl[i][k]+dpl[k+1][j]+(sum[j]-sum[i-1]);
if(tt<temp){
temp=tt;
t=k;
}
}
dps[i][j]=t;
dpl[i][j]=temp;
}
}
int ans1=-1919810,ans2=1919810;
for(int i=1;i<=n;i++){
ans1=max(ans1,dpt[i][i+n-1]);
ans2=min(ans2,dpl[i][i+n-1]);
}
cout<<ans2<<"\n"<<ans1;
}
这里空空如也
有帮助,赞一个