20140825题解.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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)

xjj2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档