【题解】 P1850 [NOIP2016 提高组] 换教室(又是一道debug的DP,debug经验++)
坑点一:
dis[u][v] = w; => dis[u][v] = min(dis[u][v], w);
坑点二:
注意到有意义的状态是从f[i][0][0]=>f[i][min(m, i)][0/1],f[i][i][0/1]是有意义的,尤其是f[1][1][1]是 有 意 义 的 ! j=0时f[i][0][1]是没有意义的;初始化:f[0][0/1][0/1]=0;
在我测试的两个数据中,一组的最优解是第一节课先去c[1],所以不用f[1][1][1]并没有用;但是另一组是先去d[1],所以必须转移到f[1][1][1];
但是这样第一组数据就有问题了
warning三:
dis[0][c[1]/d[1]]=0,用于f[0->1]的转移;
tips四:
静态差错:14->64
重构代码:64->84
整理状态意义:84->96
还有,这题是花三年前A掉的,也就是是说现在高一的我还不如初三的花。
挂一个94分+偷点的代码: