版权声明:虽然本蒟蒻很菜,但各位dalao转载请注明出处谢谢。 https://blog.csdn.net/xuxiayang/article/details/88077538
有 个点,每个点要么选它要么选它的平方要么不选,如果选了它的平方就不能选它下一个节点
数据范围:
依赖性关系只有这个节点和下一个节点,可以说是一个比较简单的链形DP了
设 表示第 个数的情况,0表示不选,1表示选它,2表示选它的平方
我这次不选的话,我上次怎么选都行,得到方程
这次选本身的话,则上次可以不选,也可以选则上一个数,得到方程
这次选平方的话,则上次可以不选,也可以选则上一个数,得到方程
实际上我们可以发现, 只和 有关,所以我们可以滚动压缩
#pragma GCC optimize(2)
%:pragma GCC optimize(3)
%:pragma GCC optimize("Ofast")
%:pragma GCC optimize("inline")
%:pragma GCC optimize("-fgcse")
%:pragma GCC optimize("-fgcse-lm")
%:pragma GCC optimize("-fipa-sra")
%:pragma GCC optimize("-ftree-pre")
%:pragma GCC optimize("-ftree-vrp")
%:pragma GCC optimize("-fpeephole2")
%:pragma GCC optimize("-ffast-math")
%:pragma GCC optimize("-fsched-spec")
%:pragma GCC optimize("unroll-loops")
%:pragma GCC optimize("-falign-jumps")
%:pragma GCC optimize("-falign-loops")
%:pragma GCC optimize("-falign-labels")
%:pragma GCC optimize("-fdevirtualize")
%:pragma GCC optimize("-fcaller-saves")
%:pragma GCC optimize("-fcrossjumping")
%:pragma GCC optimize("-fthread-jumps")
%:pragma GCC optimize("-funroll-loops")
%:pragma GCC optimize("-fwhole-program")
%:pragma GCC optimize("-freorder-blocks")
%:pragma GCC optimize("-fschedule-insns")
%:pragma GCC optimize("inline-functions")
%:pragma GCC optimize("-ftree-tail-merge")
%:pragma GCC optimize("-fschedule-insns2")
%:pragma GCC optimize("-fstrict-aliasing")
%:pragma GCC optimize("-fstrict-overflow")
%:pragma GCC optimize("-falign-functions")
%:pragma GCC optimize("-fcse-skip-blocks")
%:pragma GCC optimize("-fcse-follow-jumps")
%:pragma GCC optimize("-fsched-interblock")
%:pragma GCC optimize("-fpartial-inlining")
%:pragma GCC optimize("no-stack-protector")
%:pragma GCC optimize("-freorder-functions")
%:pragma GCC optimize("-findirect-inlining")
%:pragma GCC optimize("-fhoist-adjacent-loads")
%:pragma GCC optimize("-frerun-cse-after-loop")
%:pragma GCC optimize("inline-small-functions")
%:pragma GCC optimize("-finline-small-functions")
%:pragma GCC optimize("-ftree-switch-conversion")
%:pragma GCC optimize("-foptimize-sibling-calls")
%:pragma GCC optimize("-fexpensive-optimizations")
%:pragma GCC optimize("-funsafe-loop-optimizations")
%:pragma GCC optimize("inline-functions-called-once")
%:pragma GCC optimize("-fdelete-null-pointer-checks")
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;int n;
double x,f[2][3];
bool u,v;
double read()//小数读入优化
{
double d=0,ff=1;
char ch=getchar();
while(!isdigit(ch))
{
if (ch=='-') ff=-1;
ch=getchar();
}
while (isdigit(ch))
d=d*10+(double)(ch-48),ch=getchar();
if (ch!='.') return d*ff;
double cnt=10;
ch=getchar();
while (isdigit(ch))
d=d+((double)(ch-48)/cnt),ch=getchar(),cnt*=10.0;
return d*ff;
}
signed main()
{
memset(f,0xcf,sizeof(f));
scanf("%d",&n);
f[0][0]=f[0][1]=f[0][2]=0;u=1;v=0;
for(register int i=1;i<=n;++i)
{
u^=1;v^=1;
x=read();
f[v][0]=max(f[u][0],max(f[u][1],f[u][2]));
f[v][1]=max(f[u][0],f[u][1])+x;
f[v][2]=max(f[u][0],f[u][1])+x*x;
}
printf("%.4lf",max(max(f[v][0],f[v][1]),f[v][2]));
}