改过必给解决方案


为什么样例过不去,已知是一个破环成链的区间DP
这是代码
#include<bits/stdc++.h>
using namespace std;
int n,le;
int a[405],mx_dp[205][205],mi_dp[205][205];
char c[405];
void DP(int start,int end){
memset(mx_dp,0,sizeof(mx_dp));memset(mi_dp,0,sizeof(mi_dp));
for(int i=start;i<=end;i++){
mi_dp[i][i]=a[i];
mx_dp[i][i]=a[i];
}
for(int i=2;i<=n;i++){
for(int l=start;l+i-1<=end;l++){
int r=l+i-1;
for(int k=l;k<r;k++){
if(c[k]=='+'||c[k]=='?'){
mx_dp[l][r]=max(mx_dp[l][k]+mx_dp[k+1][r],mx_dp[l][r]);
mi_dp[l][r]=min(mi_dp[l][k]+mi_dp[k+1][r],mi_dp[l][r]);
}
if(c[k]=='-'||c[k]=='?'){
mx_dp[l][r]=max(mx_dp[l][k]-mi_dp[k+1][r],mx_dp[l][r]);
mi_dp[l][r]=min(mi_dp[l][k]-mx_dp[k+1][r],mi_dp[l][r]);
}
if(c[k]=='*'||c[k]=='?'){
int t1=mx_dp[l][k],t2=mi_dp[l][k],t3=mi_dp[k+1][r],t4=mx_dp[k+1][r];
mx_dp[l][r]=max(t1*t3,max(t1*t4,max(t2*t3,max(t2*t4,mx_dp[l][r]))));
mi_dp[l][r]=min(t1*t3,min(t1*t4,min(t2*t3,min(t2*t4,mi_dp[l][r]))));
}
}
}
}
cout<<abs(mi_dp[start][end])<<abs(mx_dp[start][end]);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]>>c[i];
}
for(int i=1;i<=n;i++){
a[n+i]=a[i];
c[n+i]=c[i];
}
for(int i=1;i<=n;i++){
DP(i,n+i-1);
}
return 0;
}