CSU 1120 病毒(DP)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1120

解题报告:dp,用一个串去更新另一个串,递推方程是:

if(b[i] > a[j])
m = max(m,dp[j]);
else if(b[i] == a[j]) dp[j] = m + 1;

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn = 1005;
 7 int a[maxn],b[maxn],dp[maxn];
 8
 9 int main()
10 {
11     int T,n,m;
12     scanf("%d",&T);
13     while(T--)
14     {
15         scanf("%d",&n);
16         for(int i = 1;i <= n;++i)
17         scanf("%d",&a[i]);
18         scanf("%d",&m);
19         for(int i = 1;i <= m;++i)
20         scanf("%d",&b[i]);
21         memset(dp,0,sizeof(dp));
22         for(int i = 1;i <= m;++i)
23         {
24             int m = 0;
25             for(int j = 1;j <= n;++j)
26             {
27                 if(b[i] > a[j])
28                 m = max(m,dp[j]);
29                 else if(b[i] == a[j]) dp[j] = m + 1;
30             }
31         }
32         int ans = 0;
33         for(int i = 1;i <= n;++i)
34         ans = max(ans,dp[i]);
35         printf("%d\n",ans);
36     }
37     return 0;
38 }    

时间: 2024-10-09 06:53:22

CSU 1120 病毒(DP)的相关文章

CSU 1120 病毒(经典模板例题:最长公共递增子序列)

1120: 病毒 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 390  Solved: 153[Submit][Status][Web Board] Description 你有一个日志文件,里面记录着各种系统事件的详细信息.自然的,事件的时间戳按照严格递增顺序排列(不会有两个事件在完全相同的时刻发生). 遗憾的是,你的系统被病毒感染了,日志文件中混入了病毒生成的随机伪事件(但真实事件的相对顺序保持不变).备份的日志文件也被感染了,但由于病毒采用

csu 1120 病毒(LICS 最长公共上升子序列)

#include <cstdio> #include <cstring> #include <queue> #include <cmath> #include <algorithm> #include <iostream> #include <cstdlib> #define lson l,mid,o<<1 #define rson mid + 1,r ,o<<1|1 using namespace

CSU 1120 病毒

最长公共上升子序列(LCIS) 裸的算法题,没什么好说的. ps:找这个算法的时候看到某队省赛的时候不会,同病相怜哈,还好我们只是训练赛不会.灭哈哈哈~ 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 6 int f[1005][1005]; 7 int main (){//cout<<"error"<&l

CSU OJ 1120 病毒(湖南省第八届大学生计算机程序设计竞赛)

 1120: 病毒 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 146  Solved: 53 [Submit][Status][Web Board] Description 你有一个日志文件,里面记录着各种系统事件的详细信息.自然的,事件的时间戳按照严格递增顺序排列(不会有两个事件在完全相同的时刻发生). 遗憾的是,你的系统被病毒感染了,日志文件中混入了病毒生成的随机伪事件(但真实事件的相对顺序保持不变).备份的日志文件也被感染了,但由于

CSU 1529 Equator DP

队列优化DP Equator Time Limit: 5000MS   Memory Limit: 131072KB   64bit IO Format: %lld & %llu Submit Status Description Input Output Sample Input 3 3 1 2 3 8 4 5 -1 -1 1 -1 -1 5 2 -1 -1 Sample Output 6 14 0 /* ********************************************

csu 1592(区间DP)

1592: 石子归并 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 356  Solved: 148[Submit][Status][Web Board] Description 现在有n堆石子,第i堆有ai个石子.现在要把这些石子合并成一堆,每次只能合并相邻两个,每次合并的代价是两堆石子的总石子数.求合并所有石子的最小代价. Input 第一行包含一个整数T(T<=50),表示数据组数. 每组数据第一行包含一个整数n(2<=n<=100)

UVA 12511/CSU 1120 virus 最长公共上升子序列

第一次接触一个这最长公共上升子序列 不过其实搞清楚了跟最长公共子序列和 最长上升子序列如出一辙 两重循环,对于当前不相等的,等于前一个的值,相等的,等于比当前A[i]小的最大值+1.弄个临时变量记录最大值即可 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int dp[2][1010]; int A[1010

J - 病毒

J - 病毒 Time Limit:3000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submit Status Practice CSU 1120 Description 你有一个日志文件,里面记录着各种系统事件的详细信息.自然的,事件的时间戳按照严格递增顺序排列(不会有两个事件在完全相同的时刻发生). 遗憾的是,你的系统被病毒感染了,日志文件中混入了病毒生成的随机伪事件(但真实事件的相对顺序保持不变).备份的日志

dp入门题目

本文文旨,如题... 转载请注明出处... HDOJ 1176 免费馅饼 http://acm.hdu.edu.cn/showproblem.php?pid=1176 类似数塔,从底往上推,每次都是从下面三个中选最大的 1 #include<cstdio> 2 #include<cstring> 3 #define MAXN 100005 4 int dp[MAXN][11];//第i秒第j个位置的馅饼数 5 int max1(int a,int b) 6 { 7 return a