我的dp实在太差了(不忍直视
写一个总结和提醒一样的东西(不定时更新
dp的几个重要的东西
状态(纬度,空间时间,哪些状态合法)
转移(转移条件,转移范围,转移顺序,所有合法状态要被考虑)
初始状态(边界)
最终状态(目标)
确定的顺序应该是从上到下
把做得不顺的题记下来
luogu2157 [SDOI2009]学校食堂(状压)
调了好久
错误在于两个细节
一是for(int j=0;j<256;++j) 0="" 1="" 3="" 4="" 这里我一开始写成for(int="" j="0;j<(1<<(b[i]+1));++j)" 这样写的话会少考虑很多情况="" 一旦当前i用过后,后面的值是可以取的="" 我想的是这些状态在i+1的时候会被考虑(?="" (="" dfpmts熬夜搞明白了原因orz="" 比如b[]="3" 顺序可以为2="" 但是在处理2的时候只会考虑1="" 2取了,3="" 4没取的情况="" 合法的状态在转移后没有被考虑="" 这就是我错误的原因="" )="" 二是枚举下一个选取的位置的时候="" 应该判是否与没有出现过的点冲突="" if(((t="">>(i-x))&1)==0&&i+b[i]<y) return 0;
前一个判断不能少256;++j)>
单调性
[USACO13OPEN]照片Photo
等于可以拆成两句话,大于等于和小于等于
有单调性的话很多都可以O(n)做了