【PAT Advanced Level】1045. Favorite Color Stripe (30)
来源:互联网 发布:网络监控画面时有时无 编辑:程序博客网 时间:2024/06/05 00:31
这几天在复习动态规划(DP),故在pat上找了两道dp的题目来练练手。
这一题看似跟动态规划扯不上,其实是可以把它看做动态规划问题——最长递增子序列(LIS)问题的一个变形。
题目中给定的第一个数组a[n],就相当于给定了“递增”的顺序。如果一个元素a[i]在a中的下标大于或等于另一个元素a[j](i>=j),我们就称a[i]>a[j]
故只需把原来LIS问题中的判断大小部分改为现在的判定大小的规则,基本就可以了。
还有几个注意点:出现在b[m]里,但a[n]里没有的元素,他们是没有顺序的,我们可以直接忽略这样的元素。
代码如下(建议先去看一看LIS问题再来看这一道题):
#include <iostream>#include <fstream>using namespace std;int N, M, P;int *a;int *b;int *L;int *stp;const int MINNUM = -999;bool compare(int tmp1, int tmp2){if(stp[tmp2 - 1] == -1)return false;if(stp[tmp1 - 1] >= stp[tmp2 - 1])return true;elsereturn false;}bool isExist(int tmp){if(stp[tmp - 1] != -1)return true;return false;}void LIS(){for(int j = 0; j < P; j++){int max = MINNUM;if(!isExist(b[j]))continue;for(int p = 0; p < j; p++){if(compare(b[j], b[p]))max = max > L[p] ? max : L[p];}if(max == MINNUM)continue;elseL[j] = max + 1;}}int main(){//fstream cin("a.txt");cin>>N>>M;stp = new int[N];for(int i = 0; i < N; i++)stp[i] = -1;a = new int[M];int tmp = 0;while (tmp < M){cin>>a[tmp];stp[a[tmp] - 1] = tmp;tmp++;}cin>>P;b = new int[P];tmp = 0;while (tmp < P){cin>>b[tmp];tmp++;}L = new int[P];for(int i = 0; i < P; i++)if(isExist(b[i]))L[i] = 1;elseL[i] = -1;LIS();int maxnum = -2;for(int i = 0; i < P; i++)if(L[i] > maxnum)maxnum = L[i];if(maxnum > 0)cout<<maxnum<<endl;elsecout<<0<<endl;//system("Pause");}
- 【PAT Advanced Level】1045. Favorite Color Stripe (30)
- 【PAT】【Advanced Level】1045. Favorite Color Stripe (30)
- PAT (Advanced Level) Practise 1045 Favorite Color Stripe (30)
- PAT (Advanced Level) Practise 1045 Favorite Color Stripe (30)
- PAT (Advanced Level) 1045. Favorite Color Stripe (30) LCS变种,动态规划
- 1045. Favorite Color Stripe (30)——PAT (Advanced Level) Practise
- Pat(Advanced Level)Practice--1045(Favorite Color Stripe)
- 1045. Favorite Color Stripe (30)-PAT
- PAT A 1045. Favorite Color Stripe (30)
- PAT 1045. Favorite Color Stripe (30)
- PAT 1045. Favorite Color Stripe (30)
- PAT 1045. Favorite Color Stripe (30)
- 【PAT】1045. Favorite Color Stripe (30)
- [pat]1045. Favorite Color Stripe (30)
- 【PAT甲级】1045. Favorite Color Stripe (30)
- PAT甲级1045. Favorite Color Stripe (30)
- PAT-A-1045. Favorite Color Stripe (30)
- PAT 甲级 1045. Favorite Color Stripe (30)
- POJ 3067 Saruman's Army
- POJ 1556 The Doors
- poj 3342 Party at Hali-Bula(树形DP+判断方式是不是唯一)
- ubifs文件系统的制作以及移植
- ubuntu 修改apache2 默认网站目录和默认主页文档
- 【PAT Advanced Level】1045. Favorite Color Stripe (30)
- 使用Weblogic10.3.2服务器建立域
- 在数据库中删除某一列
- C语言程序1
- 常见的10个Objective-C基础面试题
- 一个单例模式引发的血案
- PCA9306—I2C总线和SMBus双向电平转换器
- 【转自网络】利用Vim配置完美的Python开发环境
- Irrlicht学习备忘录——前言