天天看点

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

这次比赛呵呵哒

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

T1

这道题当时用了递归,对了一个点......但到最后发现至少少了一个exit

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

......正解是栈,其实我的做法也差不多,就是不停的把火车厢往“站”里放,如果栈顶是当前位,那就出栈;

T2

做题时一脸懵逼,而且越看越懵逼......听了讲题之后,我才知道这是一道水水的树形DP:用f[1,i]表示选第i个点的方案数,f[0,i]则反之,f[1,i]:=f[1,i]*f[0,j],f[0,i]:=f[0,i]*(f[0,j]+f[1,j]),因为如果选i,就不能选他的子节点,反之,则选不选都没关系;

T3

对这道题我只能表示无语,因为就算做对了,也不是很清楚原理,但思路还是懂的.....a表示一个分解n的数列,b表示从a中选若干个数,是每个数倍数都大于k,公式如下:

a[i]:=b[i-1]+1; 无法构造,所以只能新建一项表示;

if a[j]*k>a[i] then b[i]:=b[j]+a[i]else b[i]:=a[i]; 是每两个数倍数>k,如不能构造,则等于本身;

如果

a[i]>=n 退出循环

如果 a[i]=n 那么就是输了(lose)否则,从i-1开始,不停减去a[i-1]的值,能减就减,减到零时的a就是答案了;

继续阅读