T1:用了个递推的方法,枚举每一种药放进去或者不放进去,把剩下的体力值和背包容量所剩下的,还有枚举到了第几个药。每次都做一次比较。当然,这是傻逼做法
(对于第一题没对的人很深奥)
。正解是开一个3维数组f。然后就是十分高能的dp方程。最后,就AC了(吐槽一下,为什么考试时分数这么低?!!)。
T2:淼,纯模拟便可以过,只是要注意快排中的第二条件,把判断条件改成:
while (jla[i,1]>m) or ((jla[i,1]=m) and (jla[i,2]<m2)) do inc(i);
while (jla[j,1]<m) or ((jla[j,1]=m) and (jla[j,2]>m2)) do dec(j);
便可。
T3:递推。先计算出选1~n个数的方法,然后用一个很神奇的水法,过了。f[i,j]表示用到第i个数,一共抽了j个数的方案总数。有f[i,j]=sum{f[i-1,j-k]},边界为f[i,0]=1。
T4:请你把爆搜和宽搜的想法丢到一边去,(除非你是那一种可以优化到1000ms之内的人)从裤兜里掏出一个神奇的神器————————动态规划。(此处应有掌声)把边界都改成maxlongint,f的初始化很重要。加一个
f[i,j]:=max(f[i-1,j],f[i,j-1])+map[i,j];
f的初始化很重要。重要的事情说三遍,f的初始化很重要。
T2:淼,纯模拟便可以过,只是要注意快排中的第二条件,把判断条件改成:
while (jla[i,1]>m) or ((jla[i,1]=m) and (jla[i,2]<m2)) do inc(i);
while (jla[j,1]<m) or ((jla[j,1]=m) and (jla[j,2]>m2)) do dec(j);
便可。
T3:递推。先计算出选1~n个数的方法,然后用一个很神奇的水法,过了。f[i,j]表示用到第i个数,一共抽了j个数的方案总数。有f[i,j]=sum{f[i-1,j-k]},边界为f[i,0]=1。
T4:请你把爆搜和宽搜的想法丢到一边去,(除非你是那一种可以优化到1000ms之内的人)从裤兜里掏出一个神奇的神器————————动态规划。(此处应有掌声)把边界都改成maxlongint,f的初始化很重要。加一个
f[i,j]:=max(f[i-1,j],f[i,j-1])+map[i,j];
f的初始化很重要。重要的事情说三遍,f的初始化很重要。