RT,蒟蒻的提交得到了 UKE 的结果,求教。
#include <cstdio>
using namespace std;
#define N 32
#define int long long
int f[N][N];
signed n,rt[N][N];
inline bool isdigit(char x){return (x>='0'&&x<='9');}
inline int read(){
int x=0,flag=1;char c=getchar();
while(!isdigit(c)){if(c=='-')flag=-1;c=getchar();}
while(isdigit(c)){x=(x<<3)+(x<<1)+c-'0';c=getchar();}
return flag*x;
}
void print(int l,int r){
if(l>r)return;
printf("%lld ",rt[l][r]);
if(l==r)return;
print(l,rt[l][r-1]);
print(rt[l][r]+1,r);
}
signed main(){
n=read();
for(int i=1;i<=n;i++)f[i][i]=read(),rt[i][i]=i,f[i][i-1]=1;
for(int l=1;l<n;l++)
for(int i=1;i+l<=n;i++){
int j=i+l;
f[i][j]=f[i+1][j]+f[i][i];
rt[i][j]=i;
for(int k=i+1;k<j;k++)
if(f[i][j]<f[i][k-1]*f[k+1][j]+f[k][k]){
f[i][j]=f[i][k-1]*f[k+1][j]+f[k][k];
rt[i][j]=k;
}
}
printf("%lld\n",f[1][n]);
print(1,n);
return 0;
}
普通区间动规做法,根据评测信息猜测为 SPJ 代码 RE/MLE,求大佬解释,谢谢!