题意:

问题是对于所有的长度为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)$。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4
 5 #define LL long long
 6 #define N 2010
 7 #define P 1000000007LL
 8
 9 using namespace std;
10
11 int n;
12 LL w[N],S[N],S2[N],f[N][3][N];
13
14 LL sum(LL S[],int l,int r)
15 {
16     if(l>r) return 0LL;
17     LL ans = S[r]+P-S[l-1];
18     if(ans>=P) ans-=P;
19     return ans;
20 }
21
22 int main()
23 {
24 //    freopen("test.txt","r",stdin);
25     while(~scanf("%d",&n))
26     {
27         for(int i=1;i<=n;i++) scanf("%lld",&w[i]);
28         for(int i=0;i<=n-2;i++)
29             for(int k=1;k<=n;k++)
30                 f[i][0][k]=0, f[i][1][k]=0, f[i][2][k]=0;
31         for(int x1=1;x1<=n;x1++)
32             for(int x2=x1;x2<=n;x2++) f[0][2][x2]++;
33         for(int x1=1;x1<=n;x1++) f[0][1][x1]=1;
34         for(int i=1;i<=n-2;i++)
35         {
36             for(int k=1;k<=n;k++)
37             {
38                 S[k]  = S[k-1] +f[i-1][0][k];
39                 S2[k] = S2[k-1]+f[i-1][0][k]*(k-1)*(k-1);
40                 S2[k] += f[i-1][1][k]*(k-1);
41                 S2[k] += f[i-1][2][k];
42             }
43             for(int k=1;k<=n;k++)
44             {
45                 f[i][2][k] += sum(S2,1,k-1);
46                 f[i][1][k] += f[i-1][2][k];
47                 f[i][0][k] += f[i-1][1][k];
48                 f[i][2][k] += f[i-1][0][k]*(k-1)*(k-1);
49                 f[i][2][k] += f[i-1][1][k]*(k-1);
50                 f[i][2][k] += f[i-1][2][k];
51                 f[i][0][k] += sum(S,k+1,n);
52                 f[i][1][k] += sum(S,k+1,n)*k;
53                 f[i][2][k] += sum(S,k+1,n)*k*k;
54                 f[i][0][k] = f[i][0][k]%P * w[k]%P;
55                 f[i][1][k] = f[i][1][k]%P * w[k]%P;
56                 f[i][2][k] = f[i][2][k]%P * w[k]%P;
57             }
58         }
59         LL ans=0;
60         for(int k=1;k<=n;k++)
61         {
62             ans += f[n-2][0][k]*(k-1)*(k-1);
63             ans += f[n-2][1][k]*(k-1);
64             ans += f[n-2][2][k];
65             ans %= P;
66         }
67         cout << ans << endl;
68     }
69     return 0;
70 }

View Code

转载于:https://www.cnblogs.com/lawyer/p/6444890.html

Even Three is Odd相关推荐

  1. P2955 [USACO09OCT]奇数偶数Even? Odd?

    题目描述 Bessie's cruel second grade teacher has assigned a list of N (1 <= N <= 100) positive int ...

  2. 【Codeforces1327A】: Sum of Odd Intergers C/C++题解

    Sum of Odd Intergers 题解 Codeforces[1327A]: Sum of Odd Intergers题解 一.题目描述 二.解题思路 三.注意事项 四.完整代码 五.另一种不 ...

  3. C++Odd Even Sort奇偶排序的实现算法(附完整源码)

    C++Odd Even Sort奇偶排序的实现算法 C++Odd Even Sort奇偶排序的实现算法完整源码(定义,实现,main函数测试) C++Odd Even Sort奇偶排序的实现算法完整源 ...

  4. CodeForces - 1549F1 Gregor and the Odd Cows (Easy)(几何+数论)

    题目链接:点击查看 题目大意:给出二维平面上的 nnn 个点,任意选择出三个点可以构成一个三角形,现在问满足下面条件的三角形的个数: 三角形面积为整数 三角形包含的(不包括边界)整数点为奇数 其中所有 ...

  5. Why is it recommended to create clusters with odd number of nodes? | 为什么集群节点建议奇数个?

    Why is it recommended to create clusters with odd number of nodes? | 为什么集群节点建议奇数个? 常说集群节点要奇数台,因为当你节点 ...

  6. Leet Code OJ 328. Odd Even Linked List [Difficulty: Easy]

    题目: Given a singly linked list, group all odd nodes together followed by the even nodes. Please note ...

  7. CSS3伪类选择器:nth-child()(nth-child(odd)/nth-child(even))

    nth-child(odd):奇数 nth-child(even):偶数 使用时,如果是精确到数字时,切记是从同一级别的元素开始计算,而不是指定某个类才开始计算. 比如: <li>< ...

  8. Array with Odd Sum CodeForces - 1296A

    You are given an array aa consisting of nn integers. In one move, you can choose two indices 1≤i,j≤n ...

  9. Educational Codeforces Round 16 C. Magic Odd Square 矩阵构造

    传送门 文章目录 题意: 思路: 题意: 给你一个奇数nnn,让你构造一个n∗nn*nn∗n的矩阵,矩阵的每个位置依次填上[1,n∗n]之内的数[1,n*n]之内的数[1,n∗n]之内的数,满足每行. ...

  10. CF1479D Odd Mineral Resource

    CF1479D Odd Mineral Resource 题意: 给定一棵树,每个点有颜色 cic_ici​,多次查询,每次给定 u,v,l,r,你需要给出一个颜色 x,使得 x 满足: x∈[l,r ...

最新文章

  1. cxGrid 使用指南 1
  2. Selenium的默认配置文件和创建自己的配置文件
  3. 如何异步的处理restful服务(基础)
  4. 信号处理深度学习机器学习_机器学习和信号处理如何融合?
  5. Pycharm设置开发模板/字体大小/背景颜色 - Python零基础入门教程
  6. Java工作笔记-Spring Boot封装Jedis实例
  7. Catkin工作空间 (重点)
  8. 乐观锁的颗粒度_mysql「锁」
  9. I00009 用1生成回文数
  10. 使用jsencrypt实现参数的前端加密
  11. DjVu Reader Pro for Mac(djvu阅读器) v2.2.3激活版
  12. 微信小程序api封装方案
  13. bp神经网络预测模型python,bp神经网络预测模型
  14. 2022 年了,重新理解一波设备驱动 | Linux 驱动
  15. CF1375E Inversion SwapSort
  16. 使用java开发spark实战
  17. @DateTimeFormat@JsonFormat注解详解
  18. 重用地图的单目视觉惯导SLAM系统
  19. 用java实现建造者模式
  20. 计算机视觉中的多视图几何 -- 2D射影几何与变换 -- 相似、仿射与射影变换的层次

热门文章

  1. python多线程和异步性能对比_python对比线程,进程,携程,异步,哪个快
  2. python 自定义类(特殊方法)
  3. LeetCode 1560. 圆形赛道上经过次数最多的扇区
  4. LeetCode 568. 最大休假天数(DP)
  5. LeetCode 1538. Guess the Majority in a Hidden Array
  6. LeetCode 1064. 不动点(二分查找)
  7. PAM+4+matlab,基于PAM4调制的400G光模块
  8. yolov2训练_一文看懂YOLO v2
  9. ie浏览器模拟器_航空飞机模拟器安卓版下载-航空飞机模拟器游戏下载
  10. linux里怎样压缩文件,如何在Linux中解压缩文件