20190812
——“梦某的名字,是希望的意思。” (一口毒奶
——“为了野心.和必须得到的东西.”
某诺已经菜成渣了.
不是命中必然,是运里偶然.
$T1$ 码了半小时,调编译,过样例,弃。
剩下时间肛刚$T2$,码了一个过不去样例的DP,又想到建$m^2$的边,在树上找最大价值的链,嘤?还是过不了样例……时间不多以后打算打搜索,还是过不了样例w&#@¥×%……#&×@@……¥& 吃了$S$一样难受.
自觉的倒着翻,$T2$ $WA60$ ? 真的是运气,真的,数据水带来的假象。
——“那谁,**诺啊,你那$T3$看了没有?”
——“看了,看了。”(是啊,只是看了。都没有QJ一手
——“不做$T3$,那这场考试也是失败的啊......”
对,我太失败了..我配不上自己的野心。
$T1$. 引子
模拟 水题 过了 模拟题记得注意边界。
$T2$. 可爱精灵宝贝
数据水,瞎打有分。非正解搜索,及时$break$。
正解DP 俩数组 $f[i][j][t]$ $g[i][j][t]$ .
分别代表经历 $[i,j]$ 一段后位于$i$和$j$的最大价值
对于一个区间,遍历一遍就好,就是遇到物品就拿,反正不亏。
考虑扩展
从初位置向外转移到 $[i,j+1]$,$[i-1,j]$,思考为什么,打过$DFS$或$BFS$的应该清楚,初状态只有一个,拿$BFS$想,每次只会向左右扩展,而从左右扩展到现在并不能保证左右合法(也不是不行,加判断语句就好了,我的$WA60$思路就是由前一个状态转移到现在,不过特别麻烦,而从现在扩展到两边却很容易)扩展时考虑当前可不可拿就好。
暂提一个坑点,我们给出状态赋值时,在$sort$完的新序列找到$k$点的位置,某$hx$如下打道:
$int$ $st;$
$for(int i=1;i<=m;i++)$
$if(a[i]<=k) st=i;$
$else break;$
$memset(f,0xcf,$ $sizeof$ $ f);$
$f[st][st][1]=0;$
考虑为什么错
当你的k本身就是一个贡献点时,这样做消除了k的贡献。
你在原序列中插入一个新的 $k$ ,贡献呢,是$0$吗?如果序列中本来有 $k$,如果选择了可以贡献答案的那个 $k$ ,这个 $k$ 的贡献就没了。
如何避免? 打上花火($pa$ $to$ $hi$ $ta$ $te$ $saita$,$ha$ $na$ $mi$ $wo$ $mei$ $teita$突然鬼畜 标记强行查找,即精准到插入的那个$k$
或者判断是否原序列中有,给初值附上贡献而不是$0$.
或改变$sort$第二优先级,其实也是打标记思想精准找到插入的那个$k$.
实现起来很简单的。
$T3$. 相互再归的鹅妈妈
不会,鸽了,刘坑。