E 怎么处理环(也就是最近的休息日是下周)
这是我的链的代码,请求各位帮忙一下环的情况。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn =5000+114;
int f[maxn][maxn];
int a[maxn],n;
int pre[maxn];
signed main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) pre[i]=pre[i-1]+a[i];
for(int i=1;i<=n;i++){
for(int j=0;j<i;j++){
int t=(i-ceil((j+i)*1.0/2));
//cout<<i<<' '<<j<<' '<<t<<' '<<pre[2*t]-pre[t]<<'\n';
if(j!=0)
f[i][i]=max(f[i][i],f[i-1][j]-(pre[2*t-((i+j)%2==0?1:0)]-pre[t])+(pre[t-((i+j)%2==0?1:0)]));
else
f[i][i]=max(f[i][i],pre[i-1]);
//cout<<i<<' '<<j<<' '<<f[i][i]<<' '<<f[i-1][j]<<'\n';
if(j!=0)
f[i][j]=f[i-1][j]+a[i-j];
}
}
int ans=0;
for(int i=1;i<=n;i++) ans=max(ans,f[n][i]);
cout<<ans;
}
// 1 2 3 4 5
// 1 2 3
// 1 2 1
// 1 2 3 4 5 6 7
// 1 2 3 4 5
// 1 2 3 2 1
//t=3
//1 2 3 4 5 6 7 8
// 1 2 3 4 5 6
// 1 2 3 3 2 1
//t=3
//