WA #2 #3 #4
求最小是对的
疑似最大分数求解有误,而且都是小了一点,但是找不到原因
code:
#include<bits/stdc++.h>
#define ll long long
#define fr(i,r) for(int i=1;i<=r;i=-~i) //for:1->r
#define For(i,l,r) for(int i=l;i<=r;i=-~i) //for:l->r
#define Rof(i,r,l) for(int i=r;i>=l;i=~(-i)) //for:r->l
using namespace std;
const int N=105,Inf=0x7fffffff;
char cch;
int res,zf;
inline int rd()
{
while((cch=getchar())<45);
if(cch^45)res=cch^48,zf=1;
else res=0,zf=-1;
while((cch=getchar())>=48)res=(res*10)+(cch^48);
return res*zf;
}
int n=rd();
int a[N<<1];
int sum[N<<1];
int f[2][N<<1][N<<1];//f[0]:最小 f[1]:最大
int mi=Inf,mx;
int main()
{
// freopen("P1880.in","r",stdin);
// freopen("P1880.out","w",stdout);
memset(f[0],63,sizeof(f[0]));
fr(i,n) a[i]=a[i+n]=rd(),sum[i]=sum[i-1]+a[i],f[0][i][i]=0;
For(i,n+1,n<<1) sum[i]=sum[i-1]+a[i],f[0][i][i]=0;
For(i,2,n)
{
fr(l,n)
{
int ed=l+i-1;
For(k,l,ed-1)
{
f[1][l][ed]=max(f[1][l][ed],f[1][l][k]+f[1][k+1][ed]+(sum[ed]-sum[l-1]));
f[0][l][ed]=min(f[0][l][ed],f[0][l][k]+f[0][k+1][ed]+(sum[ed]-sum[l-1]));
}
}
}
fr(i,n)
{
mi=min(mi,f[0][i][i+n-1]);
mx=max(mx,f[1][i][i+n-1]);
}
cout<<mi<<'\n'<<mx;
return 0;
}
#2.in:
46
16 4 14 12 0 3 11 8 18 2 6 8 6 7 13 7 8 14 11 2 16 12 16 0 8 1 3 10 7 16 0 16 11 17 13 18 5 15 0 12 19 0 0 5 3 1
#2.ans:
2087
10554
my ans:
2087
10544