dp加二分法
链接:http://codevs.cn/problem/2851/
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std; int a[];
int b[];
int n,m,k;
int f[][]; int dp(int x,int y)
{
if(x==y) return a[x];
if(f[x][y]>) return f[x][y];
int mid=(x+y)/;
return f[x][y]=dp(x,mid)+dp(mid+,y);
} bool IsP(int x)
{
if(x<=) return false;
for(int i=;i<=floor(sqrt(x));i++)
if(x%i==) return false;
return true;
} int main()
{
cin>>n;
for (int i=;i<=n;i++)
cin>>a[i];
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
f[i][j]=-;
int ans=;
int l,r; for (int i=;i<=n;i++)
for (int j=i;j<=n;j++)
{
int p=dp(i,j);
if (IsP(p)&&p>ans)
{
l=i;
r=j;
ans=p;
}
}
cout<<l<<" "<<r<<" "<<ans;
return ;
}