原题地址: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. 【Python】常用内建模块(卒)

    内容来自廖雪峰的官方网站 笔记性质 1.datetime 2.collections 3.base64 4.struct 5.hashlib 6.itertools 7.contextlib 8.XM ...

  2. 广度优先搜索 BFS算法

    广度优先搜索算法(Breadth-First-Search,BFS),又称作宽度优先搜索.BFS算法是从根节点开始,沿着树的宽度遍历树的节点.如果所有节点均被访问,则算法中止. 算法思想 1.首先将根 ...

  3. 配置iptables实现本地端口转发的方法详解

    场景假如你在用 resin 调试一个 Web 程序,需要频繁地重启 resin.这个 Web 程序需要开在 80 端口上,而 Linux 限制 1024 以下的端口必须有 root 权限才能开启.但是 ...

  4. shell编程学习笔记--整数自增

    在Shell脚本中,用于while或for循环中经常要涉及到整数自增的情况,下面罗列下可能的方式 [方式一]declare -i来声明整数变量 root@localhost:~# declare -i ...

  5. idea软件编码已经设置好了为utf-8,但是svn中down下来的文件格式本身不是utf-8的,此时打开后会出现中文乱码解决方法

    我是个idea的忠实用户,新公司的项目都是用eclipse做的,通过svn拉下代码后发现,注释的内容里,中文内容都是乱码.问过项目负责人,说可能是GBK编码. 但是,我通过idea的setting设置 ...

  6. ATCODER ABC 099

    ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Sol ...

  7. nginx官网下载&百度云分享

    官网下载的链接: nginx官网下载地址:http://nginx.org/download/ 百度云分享 链接:https://pan.baidu.com/s/16m6zrFSkYCJtX0rD2Y ...

  8. mysql 创建数据库 并设置utf8格式

    CREATE DATABASE `database` CHARACTER SET utf8 COLLATE utf8_general_ci; 设置utf8之后,不容易出现中文乱码.

  9. mysql create database and user 新建数据库并为其创建专用账号

    DROP DATABASE `wordpress`;------------------------------------------------------------------ CREATE ...

  10. Ceph:pg peering过程分析

    转自:https://www.ustack.com/blog/ceph%ef%bc%8dpg-peering/ Peering:互为副本的三个(此处为设置的副本个数,通常设置为3)pg的元数据达到一致 ...