POJ3267 The Cow Lexicon——动态规划——pku3267

本文介绍了一种使用动态规划解决特定问题的方法,通过定义一个自定义函数来计算在特定条件下所需的操作次数。详细解释了状态转移方程及其应用,并提供了一个具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单的动态规划。状态转移方程:

f[i]=Min{f[i-1]+1,Make(i)}

其中Make为自定义函数:表示取了i这个位置上的字符之后前面至少要删掉多少个才能满足条件。

代码如下:

Program Lexicon;//By_Thispoet
Const
	maxn=300;
Var
	i,j,k,m,n				:Longint;
	f						:Array[0..maxn]of Longint;
	std						:Array[1..maxn*2]of String[25];
	word					:Array[0..maxn]of Char;
	temp					:Longint;
	
Function Min(i,j:Longint):Longint;
begin
	if i<j then exit(i);exit(j);
end;
	
	
Function Make(i:Longint):Longint;
var j,k,p,q:Longint;
begin	
	make:=maxlongint;
	for j:=1 to n do
		begin
			if std[j][length(std[j])]=word[i] then
				begin
					p:=0;q:=i;
					k:=length(std[j]);
					while(k>0)and(q>0)do
						begin
							while (std[j][k]<>word[q])and(q>0) do
								begin
									inc(p);dec(q);
								end;
							if std[j][k]=word[q] then
								begin
									dec(k);dec(q);
								end;
						end;
					if k=0 then Make:=Min(Make,p+f[q]);
				end;
		end;
end;


BEGIN

	readln(n,m);
	for i:=1 to m do read(word[i]);readln;
	for i:=1 to n do
		readln(std[i]);

	fillchar(f,sizeof(f),0);
	for i:=1 to m do
		begin
			temp:=Make(i);
			f[i]:=Min(f[i-1]+1,Temp);
		end;

	writeln(f[m]);

END.

 [hjp2=400,300,true]http://zhangmenshiting2.baidu.com/data/music/5800084/%E8%8B%B1%E9%9B%84.mp3?xcode=09baec1022425168097b1795eb6af7e5&r=1316564338[/hjp2]

转载于:https://www.cnblogs.com/Thispoet/archive/2011/09/21/2183043.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值