江西ccpc省赛-waves-(DP做法)

题链:http://acm.hdu.edu.cn/showproblem.php?pid=6570

  • 题意:给你长度为N,1≤N≤100000的一个数组,其中元素在[1,c]1≤c≤100 之内,求一个最长的子序列满足奇数位数字都相同,偶数位数字也都相同,但是奇偶位之间不同,问你子序列的长度。

  • 解法1:c的范围较小,由这几个性质可知,序列中只包含两个数字,可以在c的范围内枚举这两个数字。先保存一下每个数字出现的位置。

AcCode:

#include <bits/stdc++.h>
using namespace std;
#define fre freopen("C:\\Users\\22765\\Desktop\\in.txt","r",stdin);
#define ms(a) memset((a),0,sizeof(a))
#define re(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
#define sf(x) scanf("%d",&(x))
#define rg register
#define il inline
typedef long long LL;
const int inf=(0x7f7f7f7f);
const int maxn=3000;
vector<int> v[105]; int main(){
int n,c;
sf(n);sf(c);
int x;
re(i,0,n){
sf(x);
v[x].push_back(i);
} int res=0,len;
int p,q,fir,sec;
bool f;
re(i,1,c+1){ if(v[i].size()==0)continue;
re(j,1,c+1){
if(i==j)continue;
p=q=0;len=0;
fir=sec=-1;f=1; while(p<v[i].size()&&q<v[j].size()){
if(f){
while(p<v[i].size()&&v[i][p]<sec)p++;
if(p<v[i].size()){
fir=v[i][p],len++,f=0;
}
}
else {
while(q<v[j].size()&&v[j][q]<fir)q++;
if(q<v[j].size()){
len++,sec=v[j][q],f=1;
}
}
}
res=max(res,len) ;
}
}
printf("%d\n",res) ;
return 0;
}
  • 解法2:\(dp[i][j]\)表示以i结尾,前一个数是j的序列长度,\(dp[i][i]=0\),\(i\) \(!=j\)时,\(dp[i][j]=dp[j][i]+1\),对于每一个位置,预处理以当前数结尾,前一个数是\([1,c]\)中任一一个数的所有情况。

AcCode:

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
#define re(i,a,b) for(int (i)=(a);(i)<(b);++(i)) const int maxn = 1e5 + 5;
int num[maxn];
int dp[105][105];
int main()
{
std::ios::sync_with_stdio(false);
int n, c;
cin >> n >> c;
int i;
re(i, 0, n)
{
cin >> num[i];
}
int ans = 1;
re(i, 0, c + 1){
//初始化,对于数组第一个数字num[0]来说只要$i!=j那么$dp[i][j]=1$
//这里为什么是1而不是2,因为可以确定的数只有dp数组的前一个参数,
//第二个参数是不确定的
if (num[0] == i)
dp[num[0]][i] = 0;
else
dp[num[0]][i] = 1;
}
re(i, 1, n)
{
int j;
re(j, 0, c + 1)//对原序列的每一个位置,预处理第二个参数的所有情况
{
if (num[i] == j)
dp[num[i]][j] = 0;
else
dp[num[i]][j] = dp[j][num[i]] + 1;//状态转移
ans = max(ans, dp[num[i]][j]);//记录答案
}
}
cout << ans << endl;
return 0;
}

# 江西ccpc省赛-waves-(DP做法)的更多相关文章

  1. # 江西CCPC省赛-Rng(概率+逆元)

    江西CCPC省赛-Rng(概率+逆元) 题意: 给出一个n,在[1,n]之间选一个R1,在[1,R1]之间选一个L1,得到区间[L1,R1],同理获取区间[L2,R2],问两个区间相交的概率对1e9+ ...

  2. 树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree

    // 树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree // 题意:n个点的树,每个节点有权值为正,只能用一次,每条边有负权,可以 ...

  3. 2018 CCPC网络赛

    2018 CCPC网络赛 Buy and Resell 题目描述:有一种物品,在\(n\)个地点的价格为\(a_i\),现在一次经过这\(n\)个地点,在每个地点可以买一个这样的物品,也可以卖出一个物 ...

  4. ccpc 网络赛 hdu 6155

    # ccpc 网络赛 hdu 6155(矩阵乘法 + 线段树) 题意: 给出 01 串,要么询问某个区间内不同的 01 子序列数量,要么把区间翻转. 叉姐的题解: 先考虑怎么算 \(s_1, s_2, ...

  5. (四面体)CCPC网络赛 HDU5839 Special Tetrahedron

    CCPC网络赛 HDU5839 Special Tetrahedron 题意:n个点,选四个出来组成四面体,要符合四面体至少四条边相等,若四条边相等则剩下两条边不相邻,求个数 思路:枚举四面体上一条线 ...

  6. 2018 CCPC网络赛 1010 hdu 6447 ( 树状数组优化dp)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 思路:很容易推得dp转移公式:dp[i][j] = max(dp[i][j-1],dp[i-1][j ...

  7. 2018年 CCPC 网络赛 赛后总结

    历程:由于只是网络赛,所以今天就三开了.一开始的看题我看了d题,zz和jsw从头尾看起来,发现c题似乎可做,和费马大定理有关,于是和zz一起马上找如何计算勾股数的方法,比较慢的A掉了,而jsw此时看了 ...

  8. 2018普及组摆渡车洛谷5017(dp做法)

    啦啦啦,这一篇是接上一篇的博客,上一篇是记忆化搜索,而这一篇是dp+前缀和小技巧 dp这种玄学做法我这种蒟蒻当然不是自己想出来的,参考https://blog.csdn.net/kkkksc03/ar ...

  9. HDU 6212 Zuma 2017青岛网络赛 区间DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6212 解法:看了眼题就发现这个BZOJ 1032不是一毛一样?但是BZOJ上那是个巨坑,数据有错,原来 ...

随机推荐

  1. 2019 7.6 T2 虫洞

    虫洞(conch) [题目描述] HZY 现在在数轴原点处,她想跑到 2000001 这个点上.听说各路 神犇暑假里都在健♂身,所有 HZY 也想不要只是简单地跑步,于是她 决定在这条数轴上造虫洞,具 ...

  2. django-rest-framework之 json web token方式完成用户认证

    json web token的介绍:https://blog.csdn.net/kevin_lcq/article/details/74846723 1. 安装 $ pip install djang ...

  3. LVS分析

    概述 LVS是章文嵩博士十几年前的开源项目,已经被何如linux kernel 目录十几年了,可以说是国内最成功的kernle 开源项目, 在10多年后的今天,因为互联网的高速发展LVS得到了极大的应 ...

  4. C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  5. Nginx-rtmp点播之业务流程分析

    1. 点播的播放流程分析 1.1 ngx_rtmp_cycle 在握手结束后,即进入该函数中做进一步处理. void ngx_rtmp_cycle(ngx_rtmp_session_t *s) { n ...

  6. Laravel find in set排序

    做项目遇到个需求,需要对结果集中的数据进行指定规则的顺序排列.例如,用户状态有四种: 0=>未激活:1=>正常:2=>禁用:3=>软删除 现在的需求是,我要按照:正常-> ...

  7. Windows上配置Mask R-CNN及运行示例demo.ipynb

    最近做项目需要用到Mask R-CNN,于是花了几天时间配置.简单跑通代码,踩了很多坑,写下来分享给大家. 首先贴上官方Mask R-CNN的Github地址:https://github.com/m ...

  8. T89379 【qbxt】复读警告

    T89379 [qbxt]复读警告 题解 这是一道DP题 设置状态  f[ i ][ j ]  前 i 个数中所选数字之和 % key 得 j 的最大方案数 当前我们该选择第 i 个数字了,那么这个数 ...

  9. UDP打洞原理介绍

     NAT穿越模块的设计与实现 Internet的快速发展以及IPv4地址数量的不足使得NAT设备得到了大规模的应用,然而这也给越来越多的端到端通信也带来了不少的麻烦.一般来说,NAT设备允许内网内主机 ...

  10. 关于ansbile

    YAML语法规则 规则一:缩进(一个缩进两空格,注意一定不用tab) 规则二:冒号(每个冒号后一定要有空格) 规则三:短横线 - (短横线后面要空格) 编写案例 ansible-playbook -- ...