PAT甲级1045. Favorite Color Stripe

PAT甲级1045. Favorite Color Stripe

题意:

伊娃正在试图让自己的颜色条纹从一个给定的。她希望通过剪掉那些不必要的部分,将其余的部分缝合在一起,形成她最喜欢的颜色条纹,以保持最喜爱的顺序。

据说正常的人眼可以区分大约少于200种不同的颜色,
所以伊娃最喜欢的颜色是有限的。然而,原始条纹可能很长,而Eva希望拥有最大长度的剩余最喜欢的条纹。所以她需要你的帮助找到她最好的结果。

请注意,解决方案可能不是唯一的,但您只需要告诉她最大长度。例如,
给出一条条纹{2 2 4 1 5 5 6 3 1 1 5 6}。如果Eva最喜欢的颜色是以她最喜欢的顺序作为{2 3 1 5 6}给出,那么她有4个可能的最佳解决方案{2 2 1 1 1 5 6},{2 2 1 5 5 5 6},{2 2 1 5 5 6 6}和{2 2 3 1 1 5 6}。

输入规格:

每个输入文件包含一个测试用例。对于每种情况,
第一行包含正整数N(<= 200),它是涉及的颜色总数(因此颜色从1到N编号)。然后下一行以正整数M(<= 200)开始,其次是以她最喜欢的顺序给出的M Eva最喜欢的颜色数字。
最后,第三行以一个正整数L(<= 10000)开始,它是给定条带的长度,后面是条纹上的L个颜色。一行中的所有数字都以空格分隔。

输出规格:

对于每个测试用例,只需在一行中打印Eva最喜欢的条纹的最大长度。

思路:

就是让eva裁剪一块布,eva能裁剪出多长的一块布,并且布的颜色的order要按eva喜欢的颜色来。相当于最长非降序字串的问题。用dp做。时间复杂度O(n*m),n为布的长度,m为order的长度。

ac代码:

C++

// pat1045.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>
#include<stdio.h>
#include<map>
#include<cmath>
#include<unordered_map>

using namespace std;
//最长的非降子序列

vector<int> origanal;

int main()
{
	int n, m, l, temp;                              //n. color nums: 1 - n;   m. order nums;  l. origanal length;

	//input
	cin >> n;
	cin >> m;
	vector<int> order(n + 1,0);                          //类hash表储存order
	for (int i = 1; i <= m; i++)                     //order数据
	{
		scanf("%d", &temp);
		order[temp] = i;
	}
	cin >> l;
	for (int i = 0; i < l; i++)                     //origanal数据
	{
		scanf("%d", &temp);
		temp = order[temp];                         //把所有数字替换成order,按1...m排列
		origanal.push_back(temp);
	}

	//handle problem
	//dp思路:用count储存 count[i] 表示从开始时到现在,以第i个数为结尾,最长是多少。

	int maxlen = 0;
	vector<int> count(m + 1, 0);
	for (int i = 0; i < l; i++)
	{
		if (origanal[i] == 0) continue;       //不在order,cut

		count[origanal[i]]++;
		for (int k = origanal[i] + 1; k <= m; k++)
		{
			if(count[k] < count[origanal[i]])
				count[k]++;
		}

	}

	//output
	cout << count[m] << endl;

    return 0;
}


posted on 2017-08-03 10:02  炮二平五  阅读(594)  评论(0编辑  收藏  举报

导航