摘要: 这个题第一眼以为只是一个简单的序列型DP问题,于是快速的写下了下面的代码。#include using namespace std; /* 看着只是简单的序列DP..不知道有没有坑 DP[k]表示的是有前k个活动可以选择时的答案 */ struct state{ int health;//体力... 阅读全文
posted @ 2015-07-10 17:00 雨尘之林 阅读(560) 评论(0) 推荐(0) 编辑
摘要: 这个题很多地方暗示了DP的路径。我们处理时,dp[i][j]可以认为是从i坐标到j坐标的序列达到回文效果需要的最小代价,以此向外扩展,最终得到dp[0][M-1]就是结果。我们要注意到处理dp[i][j]时,我们需要知道 dp(i+1,j-1)的结果,所以i必须降序,j必须升序,才能保证在计算dp(... 阅读全文
posted @ 2015-07-10 16:46 雨尘之林 阅读(638) 评论(0) 推荐(0) 编辑
摘要: 我们发现这个题里每一种“移动套餐”用的次数只有0,1,2,3 是有效的,4和0是一样的。所以我们开一个数组rot[10]来记录这9个套餐分别用了多少次。字典序的处理和我们的枚举顺序息息相关。我们从 000000000 到 333333333 来枚举的话,第一个符合条件的结果当然就是所有答案中字典序最... 阅读全文
posted @ 2015-07-10 16:37 雨尘之林 阅读(659) 评论(0) 推荐(0) 编辑
摘要: 很简单 不用太考虑效率 虽然每次都要重新排序注意vector的使用,非常便利。还有一个技巧就是用一个have型bool数组来记录是否存在。#include #include #include using namespace std;bool have[1000] = {0};vector v; //... 阅读全文
posted @ 2015-07-10 16:31 雨尘之林 阅读(483) 评论(0) 推荐(0) 编辑