原题地址:http://www.rqnoj.cn/problem/90

解题思路:题目看起来不太像动态规划。。。

我用一个数组f[i][j]来表示在数组第i个元素的后面第一次出现j的位置,为-1则是没出现过。

然后每次查找最大的位置即可。如题目例子中:

f    1  3  5  2  4  1  3  5  2  2  2  2  3  4  1  5  3  2
-----------------------------------------------------------

1  1  6  6  6  6  6 15 15 15 15 15 15 15 15 15 -1 -1 -1 -1
2  4  4  4  4  9  9  9  9  9 10 11 12 18 18 18 18 18 18 -1
3  2  2  7  7  7  7  7 13 13 13 13 13 13 17 17 17 17 -1 -1
4  5  5  5  5  5 14 14 14 14 14 14 14 14 14 -1 -1 -1 -1 -1
5  3  3  3  8  8  8  8  8 16 16 16 16 16 16 16 16 -1 -1 -1

从第0位置开始查找,找出f[0][1]~f[0][q]中的最大值。下一次就从这个最大值的地方开始查找,直到查找到f[0][1]~f[0][q]存在-1为止。

查找的次数就是答案。

代码:

 #include<iostream>
#include<stdio.h>
using namespace std;
int s[];
int f[][];
int n,q;
int main()
{
int i,j;
//freopen("out.txt","w",stdout);
scanf("%d%d",&n,&q);
for(i=;i<=n;i++)
{
scanf("%d",&s[i]);
}
int fend[];
for(j=;j<=q;j++)
{
fend[j]=-;
}
for(i=n;i>=;i--)
{
for(j=;j<=q;j++)
{
f[i][j]=fend[j];
}
fend[s[i]]=i;
}/*
for(j=1;j<=q;j++)
{
for(i=0;i<=n;i++)
{
printf("%3d",f[i][j]);
}
printf("\n");
}*/
int ans=;
i=;
int max;
while()
{
max=;
for(j=;j<=q;j++)
{
if(f[i][j]==-) {max=-;break;}
if(max<f[i][j]) max=f[i][j];
}
if(max==-) break;
else
{
i=max;
ans++;
//printf("i=%d\n",i);
}
}
printf("%d\n",ans);
return ;
}

【解题报告】[动态规划] - PID90 / 未出现的子串的更多相关文章

  1. [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总

    本文出自   http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner  打开 这个专题一共有25题,刷完 ...

  2. 【NOIP2015】提高day2解题报告

    题目: P1981跳石头 描述 一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N ...

  3. ZOJ 1093 Monkey and Banana (LIS)解题报告

    ZOJ  1093   Monkey and Banana  (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  4. 【LeetCode】647. Palindromic Substrings 解题报告(Python)

    [LeetCode]647. Palindromic Substrings 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/p ...

  5. Codeforces Round #378 (Div. 2) D题(data structure)解题报告

    题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...

  6. 【NOIP2015】提高组D1 解题报告

    P1978神奇的幻方 Accepted 描述 幻方是一种很神奇的 N ∗ N 矩阵:它由数字 1,2,3, … … , N ∗ N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时 ...

  7. 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】

    目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...

  8. 2011 ACM-ICPC 成都赛区解题报告(转)

    2011 ACM-ICPC 成都赛区解题报告 首先对F题出了陈题表示万分抱歉,我们都没注意到在2009哈尔滨赛区曾出过一模一样的题.其他的话,这套题还是非常不错的,除C之外的9道题都有队伍AC,最终冠 ...

  9. 【百度之星2014~初赛(第二轮)解题报告】Chess

    声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载.可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...

随机推荐

  1. 20145201《Java程序设计》第五次实验报告

    实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 我负责客户端 组队队员:鄢曼君20145227负责服务器 博客地址:htt ...

  2. TCP的握手与挥手

    轻轻的TCP走了,正如TCP轻轻的来,TCP挥一挥手,传递了不知多少信息 看到哪,记到哪,想起哪,就看哪,这就是我的博客园,很随性 ---------------------------------- ...

  3. 初入spring boot(五 )websocket

    一.广播式 广播式即服务端有消息时,会将消息发送给所有连接了当前endpoint的浏览器 1.配置websocket,需要在配置类上使用@EnableWebSocketMessageBroker开启w ...

  4. select 下拉框 设置值

    function setSelectOption(objSelect, targetValue){ if(objSelect){ var options = objSelect.options; if ...

  5. oracle 结构化语言查询 DML DDL DCL

    --结构化查询语言 (Structured Query Language),具有定义. --查询.更新和控制等多种功能,是关系数据库的标准语言. --SQL分类: -- 数据操纵语言DML Data ...

  6. Java中的逻辑运算符

    逻辑运算符主要用于进行逻辑运算.Java 中常用的逻辑运算符如下表所示: 我们可以从“投票选举”的角度理解逻辑运算符: 1. 与:要求所有人都投票同意,才能通过某议题 2. 或:只要求一个人投票同意就 ...

  7. scala学习手记25 - Curry化

    curry翻译为中文就是咖喱.意为使用curry可以让代码更有味道. scala里的curry化可以把函数从接收多个参数转换成接收多个参数列表.也就是说我们要编写的函数不是只有一个参数列表,这个参数列 ...

  8. MySQL主从配置实现(同一台主机)

    ////////////////////MySQL主从(同一台主机)////////////////////// 1.安装配置MySQL参考之前步骤搭建MySQL服务为了做实验方便,我们在同一台机器上 ...

  9. jmeter的学习(配置环境)

    jmeter是一款开源工具.解压即可使用 前提要安装配置jdk.验证jdk是否安装配置成功.运行cmd输入“ java -version” 如上图所示.jdk安装配置成功:64位版本1.8 现在即可进 ...

  10. 如何在修改bug时切换分支保留修改又不提交

    使用git的时候,我们往往使用branch解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码 co ...