[LIS]外星人的密码数字

题目链接

思考

首先题目已经提示的很明显了,最长不降子序列。但是把字符串转换成数组就需要一定的技巧。在这里我用的map<char,int> 每个字符串映射一个数字

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <map>
#include <vector>
using namespace std;
map <char,int> s;
char fuck,t[1005];
int a[1005],dp[2333];
int main(){
    for(int i=1;i<=26;i++){
        char fuck;
        fuck = getchar();  //单个字符串读入
        s[fuck]=i; //每个字符串映射 第i个数字
    }
        while( ~scanf("%s",&t[1]) ){  //从1位置开始读入
        int tot = strlen(&t[1]);
        for(int i=1;i<=tot;i++){
            a[i] = s[t[i]];  //转化为数组
        }
        int ans=0;
        //O(N^2)的LIS
        for(int i=1;i<=tot;i++){
            dp[i]=1;
            for(int j=1;j<i;j++) if(a[j]<=a[i]){
                dp[i] = max(dp[i],dp[j]+1);
            }
            ans = max(ans,dp[i]);
        }
        cout<<ans;
        ans=-1;  //注意每次的初始化
        }
    return 0;
}

代码实现

吐槽

tvvj的评测姬终于不搞事情了,之前每次提交不是 Runing 就是 System error....

时间: 2024-11-05 10:58:05

[LIS]外星人的密码数字的相关文章

TYVJ 1024 外星人的密码数字 (DP)

P1024 外星人的密码数字 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 XXXX年突然有外星人造访,但大家语言不通,不过科学家们经过研究发现外星人用26个英文字母组成的单词中最长不降子序列的长度来表述数字,且英文字母的排列顺序不同,现给出其排列顺序,再给出外星人说的每个数字(其实是每个英文单词,用空格隔开),翻译出外星人所说的数字(连续输出,最后加回车). (因为是最长不降子序列,所以数字中没有0,也就是说外星人的数字是>=1的数字)例如     

P1024 外星人的密码数字

P1024 外星人的密码数字 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 XXXX年突然有外星人造访,但大家语言不通,不过科学家们经过研究发现外星人用26个英文字母组成的单词中最长不降子序列的长度来表述数字,且英文字母的排列顺序不同,现给出其排列顺序,再给出外星人说的每个数字(其实是每个英文单词,用空格隔开),翻译出外星人所说的数字(连续输出,最后加回车). (因为是最长不降子序列,所以数字中没有0,也就是说外星人的数字是>=1的数字)例如     

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

Python基础之内置方法

目录 字符串的内置方法 按索引取值 切片(顾头不顾尾,步长) 长度len 成员运算 移除两边空白strip 切分split 循环 lower&upper startswith & endswith replace join isdigit 列表类型的内置方法 按索引取值(正反向取值同字符串) 切片(同字符串) 长度(同字符串) 成员运算(同字符串) 追加值 删除 循环(同字符串) insert() pop() remove() count() index() extend() revers

315面试题+答案

第一部分 Python基础篇(80题) 1.为什么学习Python? 机器学习,脚本语言,快速开发 2.通过什么途径学习的Python? 文档,GitHub项目,博客 3.Python和Java.PHP.C.C#.C++等其他语言的对比? · Python PHP 流行程度 非常流行 非常流行 框架 许多框架 较少框架 学习 易学 难学 · Python Java 不同操作系统的兼容性 是 是 跨平台应用 否 是 学习 易学 难学 基于网络的应用 否 是 · Python C# 简单性 是 否

java 验证表单工具类,史上最全

package com.wiker.utils; import java.util.regex.*; /** * * @version 1.0 * @author wiker * @since JDK 1.6 **/ public class ValidateUtils { /** 整数 */ private static final String V_INTEGER="^-?[1-9]\\d*$"; /** 正整数 */ private static final String V_Z

[HDOJ3998] Sequence(DP,最大流)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3998 给数字,问LIS以及每一个数字只取一次,最多能取多少个LIS. LIS直接O(n^2) dp即可. 关键是怎么在统计最多能取多少个不相交的LIS: 每个数作为一个点,假如dp(i)=1,则说明这个点作为起点是不亏的,假如dp(i)=LIS,那么这个点肯定有机会是最后一个点.这样源点和汇点的边就建好: 源点 到 dp(i)=1 容量为1 dp(i)=LIS 到 汇点 容量为1 还要描述点与点之间

常见汇编代码

# 常见汇编代码 # 1. 编写程序:比较AX,BX,CX中带符号数的大小,将最大的数放在AX中 code segment         assume cs:code                   mov ax,32         mov bx,74         mov cx,23                 sort: cmp ax,bx               jge X          ;如果ax大于等于bx就跟cx比较              xchg ax,b

长理ACM 7-密码破译(闫博钊)

/* //题目标题: *密码破译(闫博钊) //题目描述: *某组织欲破获一个外星人的密码,密码由一定长度的字串组成.此组织拥有一些破译此密码的长度不同的钥匙,若两个钥匙的长度之和恰好为此密码的长度, *则此密码被成功破译.现在就请你编程找出能破译此密码的两个钥匙. //输入描述: *输入第一行为钥匙的个数N(1≤N≤5000) 输入第二行为密码的长度 以下N行为每个钥匙的长度 //输出描述: *若无法找到破译此密码的钥匙,则输出仅1行0 . 若找到两把破译的钥匙,则输出有两行,分别为两把钥匙的