uva:111 - History Grading

原创 2012年03月28日 18:28:35

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=47

LCS问题:动规方程:dp [i][j] = dp[i-1][j-1] +1 (numx[i] = numy[j]) || max{ dp[i-1] [j] , dp[i][j-1] } || 0 (i=0 || j =0) ;

注意此题题目的意思,有点绕人,看数据的时候感觉很奇怪,然后再仔细看题,才知道,输入的一系列数,对应位i上的数a[i]表示的是第i件事情发生的时间。

代码如下:

#include<iostream>
#include<stdio.h>
#include<string.h>

using namespace std ;

const int maxn = 25 ;

int n;
int numx[maxn] ;
int numy[maxn] ;
int dp[maxn][maxn] ;

int main()
{
	//freopen("data.in" , "r" , stdin) ;

	int i ;
	int j ;
	int x ;

	cin>>n;

	for(i = 1 ; i <= n ; i ++)
	{
		cin>>x ;
		numx[x] = i ;
	}

	while(cin>>x)
	{
		numy[x] = 1 ;

		for(j = 2 ; j <= n ; j ++)
		{
			cin>>x ;
			numy[x] = j ;
		}

		memset(dp , 0 , sizeof(dp)) ;

		for(i = 1 ; i <= n ; i ++)
		{
			for(j = 1 ; j <= n ; j ++)
			{
				if(numx[i]==numy[j])
					dp[i][j] = dp[i-1][j-1] + 1 ;
				else
					dp[i][j] = dp[i-1][j] > dp[i][j-1] ? dp[i-1][j] : dp[i][j-1] ;
			}
		}

		printf("%d\n" , dp[n][n]) ;
	}

	return 0 ;
}
我刚刚有重新用记忆化搜索的方式交了一下这个题目,需要注意的是:在初始化的时候应该初始化为-1,否则会出错,代码如下:
#include<iostream>
#include<string.h>
#include<stdio.h>

using namespace std ;

const int maxn = 1005 ;

char numa[maxn] ;
char numb[maxn] ;
int  num[maxn][maxn] ;

int lena ;
int lenb ;

int dp(int , int ) ; 
int main()
{
	//freopen("data.in" , "r" , stdin) ;

	while(1)
	{
		cin.getline(numa , sizeof(numa)) ;
		if(!cin)
			break ;
		cin.getline(numb  , sizeof(numb)) ;
		
		lena = strlen(numa ) ;
		lenb = strlen(numb ) ;

		memset(num , -1 , sizeof(num)) ;

		dp(lena - 1 , lenb - 1) ;

		printf("%d\n" , num[lena-1][lenb-1]) ;
	}
	return 0 ;
}

int dp(int n , int m)
{
	int & ans = num[n][m] ;
	
	if(n < 0 || m < 0)
		return 0 ;

	if(ans >= 0)
	{
		return ans ;
	}

	if(numa[n]==numb[m])
	{
		ans = dp(n - 1 , m - 1) + 1 ;
	}

	else if(dp(n-1 , m) >= dp(n , m - 1))
	{
		ans = dp(n-1 , m) ;
	}
	else ans = dp(n , m - 1) ;

	return ans ;
}



UVA 111 History Grading(最长公共子序列dp)

A - History Grading Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submi...
  • u013497977
  • u013497977
  • 2015年07月11日 01:09
  • 475

uva 111 History Grading(动态规划——最长公共子序列)

1、http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=47 ...
  • sdjzping
  • sdjzping
  • 2013年08月08日 16:08
  • 972

UVA 111 History Grading (最长公共子序列)

History Grading Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Background...
  • xia842655187
  • xia842655187
  • 2016年04月20日 19:21
  • 764

History Grading - UVa 111 最长公共子序列 注意序列输入

History Grading  Background Many problems in Computer Science involve maximizing som...
  • u014733623
  • u014733623
  • 2014年07月18日 22:15
  • 440

最长公共子序列-History Grading

History Grading
  • lele_pipi
  • lele_pipi
  • 2014年08月01日 17:12
  • 234

unity屏幕后处理全家桶之color grading

color grading color grading指的是对最终的游戏界面进行颜色和亮度的改变或矫正。你可以理解为增加滤镜。 屏幕后处理全家桶里的color grading是完全实时hdr工具,...
  • qq_18229381
  • qq_18229381
  • 2018年01月13日 14:00
  • 24

UVA 111 最长递增子序列

维护一个栈的二分写法题意: 有n个事件,现在给出每一个事件发生的次序。然后让你给学生自己写的答案打分,学生的答案就按照第二种给分的方式。也就是找出学生的答案在正确答案的相对正确的数目最多有多少个!...
  • Since_natural_ran
  • Since_natural_ran
  • 2017年07月29日 11:02
  • 69

Linux 系统 history 命令详解

history命令在linux系统中可以说是为我们ti
  • End0o0
  • End0o0
  • 2014年06月13日 15:01
  • 4270

不同session的history操作同步问题

~ 打开不同session,对应的history是不同的!需要进一步实验取证... 可能影响session的history选项就如下几个: 简单源码了解 几个简单的实验,不同session的b...
  • c__ilikeyouma
  • c__ilikeyouma
  • 2013年11月21日 20:23
  • 1532

history.js使用方法(来自博客园)

Ajax保留浏览器历史的解决方案 ul class="menu"> li>a href="/home/index#page=1">page1a>li> li>a href="/home/in...
  • shuawanxiao
  • shuawanxiao
  • 2015年01月11日 17:33
  • 20043
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uva:111 - History Grading
举报原因:
原因补充:

(最多只允许输入30个字)