- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
20140825题解
20140825题解
一:
Seq
Description
由于hyf长得实在是太帅了,英俊潇洒,风流倜傥,人见人爱,花见花开,车见车载。有一群MM排队看hyf。每个MM都有自己独特的风格,由于hyf有着一颗包容的心,所以,什么风格的MM他都喜欢……
但是,hyf有一个特别的要求,他不希望总是看到风格得差不多的MM,更加特别的是,如果两个MM风格完全一样,hyf不会有任何意见。
现在,hyf希望从去看他的MM中,去掉一些MM,从而使得相邻2个MM的风格值的差(绝对值)不为1。自然地,hyf希望去掉的MM越少越好。
Input
第一行一个整数N;
第2~N+1行N个整数,第i个为ci。表示第i个MM的风格值。
Output
一个数,表示最少要去掉的MM数。
Sample Input
6
4
2
2
1
1
1
Sample Output
2
数据规模:
对于30%的数据,N≤20
对于70%的数据,N≤100,ci ≤ 2000
对于100%的数据,N≤1000 0 ≤ ci ≤ 2000
我认为,作为一个Oier,联想的能力真的很重要,尤其是对于像NOIP这样的竞赛,常常都是改题面,改不了算法本质,所以大多数的题目都是看懂以后把对应算法稍加修改就可以AC的。
像这题,去掉最少的人首先就让我想到了那个著名的合唱队列,然后,发现这两题真的特别相似:不能排序,对子序列有严格的要求并且关系不是特别苛刻,于是,将LIS问题稍微的改动,我把它叫做“最长相邻数绝对值不为1的子序列”。
那么,关于LIS问题我就不说了。。代码如下:
var
i,j,k,l,m,n,tot,max,min:longint;
a,f,sum:array[0..2000] of integer;
procedure init;
begin
assign(input,seq.in);
assign(output,seq.out);
reset(input);
rewrite(output);
readln(n);
for i:=1 to n do readln(a[i]);
for i:=1 to n do f[i]:=1;
end;
procedure main;
begin
for i:=1 to n do
for j:=i+1 to n do
if (abs(a[j]-a[i])1) and (f[i]+1f[j]) then f[j]:=f[i]+1;
for i:=1 to n do if f[i]max then max:=f[i];
end;
procedure print;
begin
writeln(n-max);
close(input);
close(output);
end;
begin
init;
main;
print;
end.
第三题:
K好数(K-Good Number)
问题描述:
如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。给定K、L,求L位K好数的数目。
输入格式:
从文件读入数据,第一行为K、L,其中K=16,L=10。
输出格式:
将结果输出到 KGOOD.OUT
样例
KGOOD.in KGOOD.OUT 4 2
7
第一次看到这个题目的时候觉得16和10这两个数字好小,于是就暴力做,结果。。。自然是不能AC……我们就分析极值的情况吧,当k=16,l=10的时候,最大数是FFFFFFFFFF,大约是。。1,099,511,627,775十三位数。。不论怎么样都超时,于是就有了dp。
说是dp,其实像是递推(好吧,dp其实是有决策的递推。。),我们可以这样分析这个问题,3位的k进制的k好数,肯定包含了2位长度的k好数,我们以f[j,k]表示以j开头的k位k好数的个数,那么,可以接在j前的数字就可以在f[1——j-2,k+1]、f【j+2——l-1,k+1】上加上这个数。
阶段:K好数的长度
状态:0~k-1,共k个状态
边界:f[1,i]=1; 0=i=k-1; 表示长度为1的以i开头的k好数各有一个,
即:f[1,0]=1;f[1,1]=1; f[1,2]=1;….f[1,k-1]=1;
动规方程:
F[p,j]=∑f[p-1,i]; abs(j-1)1; 0=j,i=k-1
Ans=∑f[len,i] 1=i=k-1
..... 长度为2 长度为1 开头的
文档评论(0)