NOIP2013暑假模拟赛组解题报告:变音量DP与球轻重关系贪心算法.pdfVIP

  • 0
  • 0
  • 约3.21千字
  • 约 3页
  • 2026-02-03 发布于北京
  • 举报

NOIP2013暑假模拟赛组解题报告:变音量DP与球轻重关系贪心算法.pdf

Noip2013模拟赛17(A组)解题报告

题1变音量

DP。

【题解】

布尔型数组f[i,j]表示到第i首歌,音量为j是否可行。

转移:f[i,j]=f[i-1,j-d[i-1]]orf[i-1,j+d[i-1]].

时间复杂度O(N*maxL)

题2label

【题目大意】

给定N个球和M条球的轻重关系(x比y轻),求出N个球的重量,输出

字典序最小的一种。

【算法分析】

贪心+拓扑排序

首先我们先建立一个拓扑图,因为要求输出字典序最小的,所以我们就从

大的重量开始判断,即每次先找入度为0(我是由轻的重量指向重的重量)且

序号为当前所有入度为0的点中最大的,就让这个点来容纳当前重量,然后

从拓扑图中删除这个点,并减少和其相关联的点的入度。

AC代码:

var

c,p,n,m,i,j,k,x,y:longint;

ans,f,vis,b:array[0..10000]oflongint;

a:array[0..1000,0..1000]oflongint;

begin

readln(n,m);

c:=n;

fillchar(a,sizeof(a),0);

fillchar(b,sizeof(b),0);

fori:=1tomdo

begin

readln(x,y);

ifx=ythenbeginwriteln(-1);exit;end;//无解判断

inc(b[x]);//统计点的入度

inc(a[y,0]);

a[y,a[y,0]]:=x;

end;

fillchar(vis,sizeof(vis),0);

f[0]:=0;

repeat

p:=0;

fori:=ndownto1do

if(b[i]=0)and(vis[i]=0)then

begin

x:=i;

p:=1;

break;

end;

ifp=0thenbreak;//都处理完了

inc(f[0]);

f[f[0]]:=x;

vis[x]:=1;

fori:=1toa[x,0]dodec(b[a[x,i]]);//减少与此点相关联的点

的入度

dec(c);

untilfalse;

ifc0thenbeginwriteln(-1);exit;end;

fori:=f[0]downto1doans[f[i]]:=f[0]-i+1;

fori:=1ton-1dowrite(ans[i],);

write(ans[n]);

writeln;

end.

题3比那名居天子

Tenshi比那名居天子

题目大意给定一个01串,每次可以将长度为L的子串中1

变为0,求在不超过K次改变并将所有1变为0的

情况下,L的最小值。

考察算法

文档评论(0)

1亿VIP精品文档

相关文档