上一页 1 ··· 10 11 12 13 14
摘要: 这题比较有意思,暴力搜索必然tle,可以用状态压缩dp解决。我们先不考虑完成所有作业的扣分,而考虑其一个子集的情况。假设我们得到了完成某子集S对应的作业最少扣分,我们试着向该子集中增加一个元素a,那么我们将得到一个新的集合S1。从而f(S1) = min(g(S')), S'⊂S, 且#(S') =... 阅读全文
posted @ 2015-08-16 22:44 astoninfer 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 动态规划,给定长度为n(≤1e6)的整数数组和整数m,选取m个连续且两两无交集的子区间,求所有方案中使得区间和最大的最大值。dp[i][j]表示结束位置(最后一个区间最后一个元素的位置)为i且选取区间数为j的最大值。容易得到以下状态转移方程:又:考虑到数组的规模和j的更新特征,使用一维滚动数组取代二... 阅读全文
posted @ 2015-08-16 18:33 astoninfer 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 直接暴力枚举所有子矩形至少需要O(n^4)的复杂度,显然这不是一个合理的解决方法。上述方案忽略了矩形之间的联系,进行了过多不必要的计算。实际上如果固定矩形的左右边界,则底边在i行的矩形内数值之和与底边在i-1行的矩形的关系为 f[i] = s[i] + max(0, f[i - 1]), s[i]表... 阅读全文
posted @ 2015-08-16 16:23 astoninfer 阅读(145) 评论(0) 推荐(0) 编辑
摘要: dfs,用全局数组和变量保存并更新当前状态。 答案可以直接在搜索结束时打印,n为奇数时方案数为0。 1 #include <cstdio> 2 #include <cstring> 3 4 using namespace std; 5 6 const int maxn = 20; 7 int n; 阅读全文
posted @ 2015-08-16 13:14 astoninfer 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 理解错题意,wa了几次。 我一开始的理解忽略了实际背景,认为错报是绝对的,不依赖于其左边的人。 而实际上某士兵报数的对错取决且仅取决于他所报的数与其左邻所报的数。 所以假设第一个人没有报错,则其后必有人报错,报错时满足s[i] != s[i - 1] + 1 否则第一个人报错。 1 #include 阅读全文
posted @ 2015-08-16 12:36 astoninfer 阅读(105) 评论(0) 推荐(0) 编辑
上一页 1 ··· 10 11 12 13 14