2016.10.29【初中部 NOIP提高组 】模拟赛C题解

进击的2016。。




题解正在努力写。。

T1:http://blog.csdn.net/gmh77/article/details/52964643

这题刚开始是想用贪心,结果因为数组少打了1个0所以少了40分。。。


先说说贪心的思想。

因为组数要尽量分多,所以我们可以从大到小排序,就是把大的数放在一堆组成一队,剩下的较小数就可以组成更多的队伍。

反例:

1 2 4 5 5 5 5 5

如果我们从右往左找,把5个5分成一队,剩下的就不足4人,所以无法成立。

所以正解应该是这样:

(1 2) (4 5 5 5 5 5)


所以我们可以把贪心转化成DP:

设F[i]表示从1到i能组成队伍数的最大值。

根据之前的结论,可以很容易推出方程:

F[i]=max(F[j]+1) (1≤j≤i-a[i])


But——

这种方法的时间复杂度是近似O(N^2),所以会超时。


预知后事请看http://blog.csdn.net/gmh77/article/details/52964643


T2:http://blog.csdn.net/gmh77/article/details/52965011

这道题刚开始做时一脸懵逼,知道正解后发现竟是如此之水。。。


60分:

BFS枚举,设D[i,1]表示当前的a,D[i,2]表示当前的b,D[i,3]表示当前进行了D[i,3]次操作。

之后再加优化:

①:如果当前算出的a或b超过了N,就已经不成立了。

②:如果当前进行的操作已经超过了之前算出的最小值,无论对错都可以不用继续进行了。

BFS因为数据量过于庞大,所以要么数组爆炸要么答案错误。


100分:http://blog.csdn.net/gmh77/article/details/52965011


T3:http://blog.csdn.net/gmh77/article/details/52965211

T3题解:

100分(总分200):

根据数据范围可以知道,100%的数据撤销操作不会撤掉之前的撤销操作。

所以撤销操作能撤掉的只有插入操作。而插入操作每次都是在最末尾,所以每次把后X个字母删掉就可以了。

 

180分:

设a[i]表示第i次出现的结果,每产生一个新的结果后,就把i的值增加1,把新出现的结果放到a[i]中。

从数据得知,UNDO操作是可以撤掉UNDO操作的。所以我们不能直接删字母。

因为UNDO是最后X次操作,所以如果遇到UNDO就把a[i]赋值为a[i-x-1]。


200分:http://blog.csdn.net/gmh77/article/details/52965211

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值