题意:

问题是对于所有的长度为n,且$1<=ai<=n$的整数序列求 $\prod_{i=1}^{n-2}{max \{w_i,w_{i+1},w_{i+2}}\}$ 之和。

解法:

首先设dp状态为 $f(i,j,k)$ ,长度为$i+3$的,最大值为k,且最大值出现的位置集合为j的序列的乘积和。

显然可以由 $f(i-1,j2,k2)$ 转移到 $f(i,j,k)$,做前缀和优化,总效率$O(n^2 * 2^6)$

重新设计dp状态,改变j的定义,j表示最大值最后出现的位置。

这样对于状态 $f(i,j,k)$,我们确定了长度为$i+j$的序列的值,并且确定了$a(i+j+1)...a(i+2)<k$ 。

假设之前的三个数字最大值为$k2$,之后的最大值为k,这样的的话只要分为 $k>k2, k<k2, k=k2$ 讨论即可得出答案。

再加以前缀和优化,总效率$O(n^2)$。

 #include <iostream>
#include <cstdio>
#include <cstring> #define LL long long
#define N 2010
#define P 1000000007LL using namespace std; int n;
LL w[N],S[N],S2[N],f[N][][N]; LL sum(LL S[],int l,int r)
{
if(l>r) return 0LL;
LL ans = S[r]+P-S[l-];
if(ans>=P) ans-=P;
return ans;
} int main()
{
// freopen("test.txt","r",stdin);
while(~scanf("%d",&n))
{
for(int i=;i<=n;i++) scanf("%lld",&w[i]);
for(int i=;i<=n-;i++)
for(int k=;k<=n;k++)
f[i][][k]=, f[i][][k]=, f[i][][k]=;
for(int x1=;x1<=n;x1++)
for(int x2=x1;x2<=n;x2++) f[][][x2]++;
for(int x1=;x1<=n;x1++) f[][][x1]=;
for(int i=;i<=n-;i++)
{
for(int k=;k<=n;k++)
{
S[k] = S[k-] +f[i-][][k];
S2[k] = S2[k-]+f[i-][][k]*(k-)*(k-);
S2[k] += f[i-][][k]*(k-);
S2[k] += f[i-][][k];
}
for(int k=;k<=n;k++)
{
f[i][][k] += sum(S2,,k-);
f[i][][k] += f[i-][][k];
f[i][][k] += f[i-][][k];
f[i][][k] += f[i-][][k]*(k-)*(k-);
f[i][][k] += f[i-][][k]*(k-);
f[i][][k] += f[i-][][k];
f[i][][k] += sum(S,k+,n);
f[i][][k] += sum(S,k+,n)*k;
f[i][][k] += sum(S,k+,n)*k*k;
f[i][][k] = f[i][][k]%P * w[k]%P;
f[i][][k] = f[i][][k]%P * w[k]%P;
f[i][][k] = f[i][][k]%P * w[k]%P;
}
}
LL ans=;
for(int k=;k<=n;k++)
{
ans += f[n-][][k]*(k-)*(k-);
ans += f[n-][][k]*(k-);
ans += f[n-][][k];
ans %= P;
}
cout << ans << endl;
}
return ;
}

最新文章

  1. rails再体验(第一个程序)
  2. SVG 基础
  3. 前端Mvvm QC 上传了测试版
  4. JAVA_Java中关于supper和this的理解
  5. ubuntu下python连接mysql
  6. [转载]QString 乱谈(3)-Qt5与中文
  7. HDU 5876:Sparse Graph(BFS)
  8. laypage分页功能demo
  9. [iOS UI进阶 - 5.0] 手势解锁Demo
  10. [转载]async &amp; await 的前世今生
  11. PHP学习心得(十)——控制结构
  12. 杭电 HDU ACM Milk
  13. C# - InnerList
  14. Everything You Wanted to Know About Machine Learning
  15. git上自然框架源码
  16. Linux的netstat查看端口是否开放见解(0.0.0.0与127.0.0.1的区别)
  17. GNS3的配置
  18. 洛谷 P1430 解题报告
  19. Mybatis Generator生成数据库自带的中文注释
  20. IdentityServer4 中文文档 -14- (快速入门)使用 ASP.NET Core Identity

热门文章

  1. Android Studio Ndk 编程
  2. android4.4 evaluateJavascript 到android2.X上不能调用的问题
  3. B树的生成
  4. maven命令学习-发布上传jar包-deploy
  5. vmware workstation14永久激活密钥
  6. WPF控件模板和数据模板 - 醉意人间
  7. 清理yum 缓存
  8. Storage Types and Storage Policies
  9. BZOJ 2002 Bounce 弹飞绵羊 —— 分块算法
  10. Java生成UUID不重复的id值