题目大意

有一个序列$A_i$

  • 对于 i ≥ 1,如果有$ A_i > 0、A_{i+1}> 0$ 且存在 $A_{i+2}$,那么法老可以令$ Ai$ 和 $A_{i+1}$ 减一,并令$ A_{i+2}$ 加一。

   • 如果 $A_{i+2}$ 不存在,但是其余两个条件满足,那么法老仍然可以令 $A_i$ 和 $A_{i+1}$ 减一。此时这两个元素位于序列尾端,法老需要在序列尾端加入一个新的 元素,其值为 1。

问有多少可能存在的不同的序列

分析:

  考场上状态设计错了...搞了一个4维的乱七八糟的东西然后放弃了...

  打的爆搜还过不了最后打表才拿了20pts

  记f[i][x][y]为当前是第i个位置,当前值为x,下一个值为y

  转移方差:$$f[i+1][y+t][a[i+2]-t]+=f[i][x][y]$$

  然后记忆化搜索就好了

 #include<bits/stdc++.h>
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-')f=-;chr=getchar();}
while(isdigit(chr)) {ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}const int M = ,mod=1e9+;
int a[M],n,f[][][];
int DP(int x,int t1,int t2){
if(x>=n&&t2<=) return ;
if(f[x][t1][t2]!=-) return f[x][t1][t2];
int now=;
for(int i=;i<=min(t1,t2);i++)
now=(now+DP(x+,t2-i,a[x+]+i))%mod;
return f[x][t1][t2]=now%mod;
}
int main(){
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
int T=read();
while(T--){
n=read();
for(int i=;i<=n;i++)a[i]=read();
memset(f,-,sizeof(f));
int Ans=DP(,a[],a[]);
printf("%d\n",Ans);
}
return ;
}
/*
3
3
2 3 1
2
2 2
3
1 2 3
*/

最新文章

  1. [转]C# 连接 Oracle 的几种方式
  2. Leetcode # 169, 229 Majority Element I and II
  3. windows下php,redis配置
  4. Java list的用法排序及遍历
  5. 深入理解PHP原理之变量作用域
  6. 怎样为virtualbox添加新的分辨率
  7. css案例学习之全局声明*{} 与body{}的区别
  8. Maven配置插件跳过测试代码的编译和运行
  9. Vijos 1006 晴天小猪历险记之Hill 单源单汇最短路
  10. 以打印日志为荣之logging模块详细使用
  11. nginx.conf配置文件的简单说明
  12. Weka学习 -- StringToWordVector 源代码学习(1)
  13. [AHOI 2016初中组]迷宫
  14. SPOJ VLATTICE(莫比乌斯反演)
  15. Android自带Monkey测试
  16. python的变量与注释
  17. 【转】Flask入门之上传文件到服务器
  18. Python 的几种推导式
  19. 通达OA2008从windows环境移植到linux部署手册
  20. 原型模式(prototype pattern)---------创造型模式

热门文章

  1. 从[id setValue: forKey:]了解KVC
  2. Android Canvas save和restoreToCount
  3. (转)python:Redirection is not supported
  4. UVA-10200-Prime Time-判断素数个数(打表预处理)+精度控制
  5. Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南
  6. JS对象 提取指定数目的字符substr() substr() 方法从字符串中提取从 startPos位置开始的指定数目的字符串。
  7. P5390 [Cnoi2019]数学作业
  8. 如何理解 if __name__ == &quot;__main__&quot;
  9. vsftp 被动模式配置
  10. Java Collection - HashMap