- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划69274.doc
NOIP动态规划相关内容
记忆划搜索
function dp():longint;
begin
if 被搜索过 then exit();
if 边界条件 then exit(maxlongint)/exit(-maxlongint)/exit(0);
枚举所有可能推出的状态 begin
temp:4^的状态
如果比记录的更优,则更新
end;
bool[J:=true;
exit(f[]);
end;
山寨vj 1004滑雪
由于拓扑关系不明显,故使川记忆化搜索
function dfs(x,y:longint):longint;
var i:longint;temp:longint;
begin
if f[x,y]0 then exit(f[x,y]);
for i:=l to 4 do begin
temp:=0;
if a[x,y]a[x+dx[i],y+dy[i]] then temp:=dfs(x+dx[i],y+dy[i])+1; if f[x,y]temp then f[x,y]:=temp;
end;
exit(f[x,y]);
end;
st 10200统计单同个数
function dfs2(i,j:longint):longint; //dfs2 表示 I,j 区间包含单词的个数
var maxn,k:longint;
begin
if i〉j then exit(0);
if boolg[ij]=true then exit(g[ij]);
maxn:=dfs2(i+l,j);
for k:=l to n do if i+length(a[k])-l=j then
if a[k]=copy(s,i,length(a[k])) then maxn:=max(maxn,dfs2(i+1,j)+1);
gli,jj:=maxn;
boolgli,jj:=true;
exit(g[i,j]);
end;
function dfs(i,j:longint):longint; //dfs表示前i个字母分j个括号的最优解
var maxn,k:longint;
begin
if boolfi,j]=true then exit(f[i,j]);
if j=0 then exit(O);
maxn:=-maxlongint;
for k:=j-l to i-1 do
maxn:=max(maxn,dfs(k j-1 )+dfs2(k+1,i)); ffi,jl:=maxn; bool[i,j]:=true; exit(f[i,j]); end;
st 10229特殊的DNA片段
表示I到j区间內需要添加的最优解
function dfs(i,j:longint):longint;
var k,minx:longint;
begin
if i〉j then exit(0);
if bool[i,j] then exit(f[i,j]);
minx:=maxlongint;
for k:=i toj-1 do
minx:=min(minx,dfs(i,k)+dfs(k+l,j)); ifasm^A1) and (s[jl=T)) or
(($[i]=T) and (s[j]=*A*)) or ((s[i]=,C,) and (s[j]=,G,)) or ((s[i]=G’)and (sljJ-C)) then
minx:=min(minx,dfs(i+l,j-l)); minx:=min(minx,dfs(i+1,j)+1,dfs(i,j-1)+1); bool[i,j]:=true;
f[ij]:=minx;
exit(flijj);
end;
数塔问题(1取方格数、数字三角形)
f[i,j]表示从(1,1)走到(i,j)的最大(最小)权和 f[i,j]=max(f[i-l,j],f[i-l,j-l])+a[i,j]
数字三角形mod 100最大
procedure dfs(i,j:longint;k:longint);
var maxn:longint;
begin
if bool[i,j,k]=true then exit;
k:=(k+a[i,j]) mod 100;
if i=n then
begin
if loans then ans:=k; exit; end;
bool[i,j,k]:=true;
dfs(i+l,j,k);
dfs(i+l,j+l,k);
end;
数字三角形必须经过定点
function dfs(i,j,k:longint):longint;
var maxn:longint;
begin
if boolli,j,k] then exit⑼;
bool[i,j,k]:=true;
if
文档评论(0)