hud 6078 Wavel Sequence
题目大意:给你两个序列a,b,让你找出两个函数 f 和 g 使得 a[f]=b[g],并且a[f1],a[f2],a[f3]……a[fk]满足 序列a1 < a2 > a3 < a4……为你满足关系的 f 和 g有多少种
解题思路:不难想到我们可以单独考虑每个数字,看它作为波峰有多少种情况,波谷有多少种情况,然后求和。但是具体怎么求每个数字作为波峰的情况和波谷的情况呢?因为我们要用a数组来构造波浪,所以我们不妨可以将a数组固定,然后根据条件在b数组中寻找a中每个数据可能作为波峰和波谷的所有情况。具体要怎么做看代码

#include <bits/stdc++.h>using namespace std;
const int mod = 998244353;
int dp[2005][2],sum[2005][2];
/**
dp[][0]用来保存b数组中这个值作为波谷的情况
dp[][1]用来保存b数组中这个值作为波峰的情况
sum[][0]用来保存b数组中这个值作为波谷的总情况
sum[][1]用来保存b数组中这个值作为波峰的总情况
*/
int main()
{int T;scanf("%d",&T);while(T--){memset(dp,0,sizeof(dp));memset(sum,0,sizeof(sum));int n,m,a[2005],b[2005];scanf("%d %d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int j = 1; j <= m;j++)scanf("%d",&b[j]);long long ans = 0,cnt0,cnt1;///ans用来存f和g共有多少种选择,从cnt1用来保存当前值做波峰的情况,cnt0用来保存做波谷的情况for(int i=1;i<=n;i++){cnt0 = 1;cnt1 = 0;///因为每个数字都可以单独作为波谷,所以波谷初始值为1.for(int j = 1; j <= m; j ++){dp[j][0] = dp[j][1] = 0;if(a[i] == b[j])///表示此时已经找到一组可以为波浪的数据,并将这个波峰,波谷的值记下,方便后边使用,ans要累加上{dp[j][0] = cnt0;dp[j][1] = cnt1;ans = (ans + cnt0 + cnt1)%mod;}else if(a[i] > b[j])///如果当前这个值比a[i]要小的话说明a[i]可以作为波峰,这个时候它可以承接前边所有的波谷的情况,所以要加上前边波谷的所有情况cnt1 = (cnt1 + sum[j][0])%mod;else///如果当前这个值比a[i]要大的话说明a[i]可以作为波谷,这个时候它可以承接前边所有的波峰的情况,所以要加上前边波谷的所有情况cnt0 = (cnt0 + sum[j][1])%mod;}for(int j=1;j<=m;j++){///每次都要记录下每个点作为波峰和波谷的总情况if(a[i] == b[j]){sum[j][0] = (sum[j][0]+dp[j][0])%mod;sum[j][1] = (sum[j][1]+dp[j][1])%mod;}}}printf("%lld\n",ans);}return 0;
}

hud 6078 Wavel Sequence相关推荐

  1. HDU 6078 Wavel Sequence

    Wavel Sequence Problem Description Have you ever seen the wave? It's a wonderful view of nature. Lit ...

  2. HDU 6078 Wavel Sequence (dp)

    Description Have you ever seen the wave? It's a wonderful view of nature. Little Q is attracted to s ...

  3. HDU 6078 Wavel Sequence【动态规划】

    题目来戳呀 Problem Description Have you ever seen the wave? It's a wonderful view of nature. Little Q is ...

  4. 2017多校第4场 HDU 6078 Wavel Sequence DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6078 题意:求两个序列的公共波形子序列的个数. 解法: 类似于最长公共上升子序列,对于每个i,只考虑存 ...

  5. hdu 6078 Wavel Sequence

    题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6078 (2017 Multi-University Training Contest - Team ...

  6. (2017多校训练第四场)HDU - 6078 Wavel Sequence dp

    传送门:点击打开链接 定义状态dp[i][j][0]表示以a[i],b[j]结尾的且为波谷的情况总和,dp[i][j][1] 为波峰. 对于某个i,j满足a[i] == b[j],则dp[i][j][ ...

  7. HDU - 6078 Wavel Sequence(动态规划+时间优化)

    代码: #include<bits/stdc++.h> #define MOD 998244353 using namespace std; #define MAXN 2050int dp ...

  8. HDU 6078 Wavel Sequence(dp)

    Description 定义波浪序列:a1 > a2 < a3-,现在给出一个长度为n的序列a和一个长度为m的序列b,求a和b的公共波浪子序列个数 Input 第一行一整数T表示用例组数, ...

  9. 2017 多校4 Wavel Sequence

    2017 多校4 Wavel Sequence 题意: Formally, he defines a sequence \(a_1,a_2,...,a_n\) as ''wavel'' if and ...

最新文章

  1. 实战派mysql高阶应用指南_MySQL高阶SQL语句(学会这些,让你对于数据库游刃有余)_Gengchenchen的博客-CSDN博客...
  2. JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器
  3. java设计模式--简单工厂设计模式SimpleFactoryPattern
  4. 十大经典排序算法python_十大经典排序算法的算法描述和代码实现
  5. google的一些秘密入口
  6. eclipse查找指定行数
  7. c语言编程计算平分,用C语言编程平均分数
  8. ASP导出到Excel
  9. 怎么解决计算机键盘驱动,键盘驱动不兼容,详细教您键盘驱动不兼容怎么解决...
  10. 问题:无法打开Workstation服务,错误代码2250
  11. 微信自定义菜单以及自动回复
  12. 如何升级win10.
  13. qt:cannot open C:\Users\某某某\AppData\Local\Temp\main.obj.15576.16.jom for write
  14. 用Unity实现Flat Shading
  15. 浙江新青年计算机学校,新青年
  16. awk oracle,工具: ass109.awk 分析 Oracle 的跟踪文件
  17. 【JAVA】科研信息管理系统
  18. 全球城市ZoneId和UTC时间偏移量的最全对照表
  19. Linux期末复习笔记(太原理工大学)
  20. 2的31次方与2的负31次方

热门文章

  1. 怎么快速学会计算机程序知识,零基础学电脑怎样才能学得快,自学电脑的基础知识分享...
  2. Outlook关闭时最小化到任务栏的完美解决方法
  3. fortran教程9:和C语言混合编程
  4. Ceph Calamari安装问题汇总
  5. 浅析安全架构中遇到的问题
  6. texstudio暗色主题
  7. Keil暗色模式配置文件
  8. Kettle【实践 01】Linux环境下使用Azkaban定时调用Kettle的KJB或KTR脚本实现自动化数据处理(完整流程实例分享:包含sql+ktr+shell+flow相关文件云资源)
  9. 【中创福利】有一种年味叫公司发年货
  10. 脱口而出的 “ 感谢的语言 ”