设为首页 加入收藏

TOP

UVa 111: History Grading
2014-11-23 21:42:26 来源: 作者: 【 】 浏览:8
Tags:UVa 111: History Grading

这道题首先要对输入进行处理,解题的一般思路是将所给的c数组与r数组按照各个历史事件的rank重排,即最早的事件的编号放在数组的第一位......然后这题转化为求两个串的最长公共子序列长度的问题。

但我使用了另外一种解法(虽然仍然要用动态规划 =-= ):

只对输入的c数组重排(即c数组中c[i]存放rank为i的事件的编号),r数组不变。建立ans数组,ans[i]存放以rank为i为结尾的最长序列长度,初始化均为1。

程序从第0个开始填充ans数组。当执行到求ans[i]时,分别判断rank从0 — i-1 的事件,如j事件,在学生的解答(即r数组中数据)中发生时间是否也在i事件之前,如果在其之前,则用ans[j]+1更新ans[i](因为ans[i]初始化为1)。ans数组填充完毕后,其中最大值即为所求结果。

我的代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

int c[20],r[20];
int ans[20];
int N;
int main()
{
	cin >> N;
	int ci;
	for(int i=0; i> ci;
		c[ci-1]=i;
	}
	int tmp;
	while(cin >> tmp)
	{
		r[0]=tmp;
		ans[tmp]=0;
		for(int i=1; i> r[i];

		int maxlen=1;
		ans[0]=1;		
		for(int i=1; i 
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇花非花--记vs2010 c++调试问题 下一篇HDU 4628 多校第三场1008 dp

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·【C语言】动态内存管 (2025-12-27 06:23:20)
·C语言中的内存管理 - (2025-12-27 06:23:16)
·C语言指南:C语言内 (2025-12-27 06:23:14)
·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)