题目链接:hdu6570
题目大意(机翻):
Avin正在研究系列。 如果满足以下条件,则一个系列称为“波动”:
1)它至少包含两个元素;
2)所有位于奇数位置的元素都相同;
3)偶数位置的所有元素都相同;
4)奇数位置的元素与偶数位置的元素不同。
您得到的序列长度为n。 Avin要求您找到最长的“波浪”子系列。 子系列是系列的子序列。

第一眼看见,我就觉得他是个dp(看题解才知道暴力也行);
我是这么考虑的在一开始
f[i][j][0/1]: 表示的是选取了第i个数字后是奇数长度还是偶数长度, 然后如果当前长度是奇数,则j代表偶数位置的数的大小是j,如果当前长度是偶数则同理。(0代表链长为偶数,1是奇数)考虑如何转移,我们知道了j之后只要去枚举1-(i-1)位置的所有数字,然后当那个位置的数是j就去选取f[k][value[i]][(0/1)^1]
就是原本是奇数你这时候就要选取偶数,原本是偶数也同理。
但是这样就是n^2,会超时,就考虑去优化。我是选择使用的
g[i][j][(0/1)]去代表着前k个数那个某个位置的数为i然后选择了i之后的长度是偶数还是奇数,与他对应的数字是j的最大长度
就从原本枚举f的1-(i-1)变成了直接拿g[j][value[i]][(0/1)^1];

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define ll long long
const int inf = 1e9 + 7;
const int max_ = 1e5 + 500;
int mod = 100003;
inline int read()
{int s = 0, f = 1;char ch = getchar();while (ch<'0' || ch>'9') {if (ch == '-')f = -1;ch = getchar();}while (ch >= '0'&&ch <= '9') {s = s * 10 + ch - '0';ch = getchar();}return s * f;
}
int f[max_][100][3], g[100+50][100 + 50][3],n,c,node[max_];
int max(int a, int b) {return a > b ? a : b;
}
int main() {n = read(), c = read();for (int i = 1; i <= n; i++) {node[i] = read();}int ans = -1;for (int i = 1; i <= n; i++) {for (int j = 1; j <= c; j++) {if (j == node[i])continue;//选了i后是偶,奇位置上的是jf[i][j][0] = g[j][node[i]][1] + 1;//选了i后是奇,偶位置上的是jf[i][j][1] = g[j][node[i]][0] + 1;g[node[i]][j][0] = max(g[node[i]][j][0], f[i][j][0]);g[node[i]][j][1] = max(g[node[i]][j][1], f[i][j][1]);ans = max(ans, max(f[i][j][0], f[i][j][1]));}}if (ans == 1) {cout << "0"<<endl;return 0;}cout << ans << endl;return 0;
}

hdu6570 动态规划 dp相关推荐

  1. 第4课 防卫导弹(第十章 动态规划--DP)

    //progream p10_04 /* 第4课 防卫导弹(第十章 动态规划--DP)  (<聪明人的游戏--信息学探秘 提高篇>) https://blog.csdn.net/weixi ...

  2. 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包

    动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包 01背包 && 完全背包 && 分组背包 の 视频教程:https://www.bilibi ...

  3. 【习题详解】动态规划DP:硬币游戏 蛋糕 游荡的奶牛 决斗

    动态规划DP 硬币 蛋糕塔 游荡的奶牛 格斗 硬币 题目描述 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为"Xoinc"的两人硬币游戏. 初始时,一个有N(5 <= N ...

  4. 动态规划: dp+递推——确定动态矩阵dp含义,确定每个状态下面临的选择和对结果值影响,选择符合题意的作为结果存储在dp中

    1.动态规划:每一个状态一定是由之前的状态推导出来的,通过总结归纳发现递推关系 2.解决动态规划问题的步骤: 确定dp数组(dp table)以及下标的含义: 每个单元内 题目所求的值,一维.二维 确 ...

  5. Datawhale编程——动态规划DP

    0-1背包问题 问题:有n个物品,第i个物品价值为vi,重量为wi,其中vi和wi均为非负数,背包的容量为W,W为非负数.现需要考虑如何选择装入背包的物品,使装入背包的物品总价值最大. 针对这个经典的 ...

  6. 《强化学习》中的 时序差分学习 Temporal-Difference Learning (基于与动态规划 DP 、蒙特卡洛方法 MC 的对比)

    前言: 学习了 Sutton 的<强化学习(第二版)>中时序差分学习的"预测"部分内容.前两章中,书介绍了 动态规划 与 蒙特卡洛方法 ,我们从二者与 时序差分学习 的 ...

  7. HDU2571 命运【动态规划DP】

    命运 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  8. 算法技能树2-蓝桥杯-python实现测试次数(摔手机)-动态规划(DP)

    文章目录 1.题目描述 2.python解题 1.知识点总结 1.题目描述 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规 ...

  9. 动态规划(dp)总结

    问题 T: [动态规划]质数和分解 题目描述 任何大于1的自然数n,都可以写成若干个大于等于2且小于等于n的质数之和的形式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式.例如9 ...

最新文章

  1. 科技公司最常用的50款开源工具,提升你的逼格~
  2. 线性表adt的c语言表达,抽象数据类型定义(ADT)
  3. 需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。
  4. 初识C++之剖析const与#define
  5. 【亚伦博客】反方观点: 下载不是偷窃
  6. 2.微型计算机系统的基本结构及计算机各个部件的功能
  7. 适配器模式/adapter模式/结构型模式
  8. Java之父:Solaris前景堪忧
  9. 龙蜥社区陈绪:从CentOS 停服说起,龙蜥操作系统的开源观
  10. 自然语言处理(NLP)语义分析--文本分类、情感分析、意图识别
  11. 郝斌c语言链表源码,链表的创建(郝斌视频)
  12. Matlab 绘制柱状图并标注对应数字值
  13. 软件系统设计-16-架构文档
  14. ubuntu系统学习(1) 测网速命令/实时显示网速speedometer
  15. 拼多多、轻课、宝宝玩英语们:一样的微信刷屏,不一样的姿态
  16. phpmail通过qq发邮箱失败_PHP中利用PHPMailer配合QQ邮箱实现发邮件
  17. 苹果iOS证书制作教程
  18. gdal浅析(二)波段操作
  19. 查看Linux服务器内存大小,cpu个数,型号
  20. ELO(埃洛匹配分制度)Java篇

热门文章

  1. 数学建模_以fisheriris数据为例使用新版本神经网络工具箱feedforwardnet进行简单实现
  2. m*n矩阵转换为n*m矩阵
  3. 参与GlobalPlatform标准体系建设 百度函谷成就极致安全
  4. 标签span切换成可修改内容的input 详情
  5. python删除文件某行_python 文件操作删除某行的实例
  6. AndroidStudio编译报错org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:proces
  7. 雷军卸任小米有品公司董事,仍持股70%;马斯克决定不加入推特董事会;一加10 Pro内核源代码公布|极客头条
  8. 大厂UI设计师推荐,这9款设计软件晋升必备
  9. 【转载】 UVM时间打印格式--timeformat
  10. CorelDRAW使用图文教程电子书