摘要: 我日了啊,就是一道大水题。老师上课说二分那个最大最近距离,但实际上二分会T啊!!!! 直接正常的优先队列就完事了啊!!! 阅读全文
posted @ 2018-07-30 11:10 4397 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 要想到两个点 1)dp[i]表示前i个最少切多少刀变成回文, 那dp[i] = min( dp[k-1] + 1 ) 其中k-i能组成回文 O(n^2)过了 2)所以这里要考虑个问题怎么知道i能跟之前的哪些字符组成回文。 如果枚举的话 第i个字符枚举【跟第1-i-1个字符组成回文】,判断O(n),这 阅读全文
posted @ 2018-07-29 19:00 4397 阅读(588) 评论(0) 推荐(0) 编辑
摘要: 神题,我是以前花了一周时间才写出minmax,有经验所以补上alpha-beta就会容易一些。(虽然alpha-beta剪枝也很难) 所以题解就不写了,想学minmax的话网上有很多现成的。 阅读全文
posted @ 2018-07-29 18:01 4397 阅读(461) 评论(0) 推荐(0) 编辑
摘要: 感觉非常的难想状态 首先想dp(i)代表前i个座位的最大能力值,但第i个座位带来的能力值与左右空不空有关,所以需要再加一维。而加的第二维我觉得就比较难想 解释下dp[i][0-3]表示的意义,以dp[i][2]来说,你可能一开始像我一样觉得dp[i][2]规定了右边的座位被take了,但却没有考虑i 阅读全文
posted @ 2018-07-28 14:28 4397 阅读(281) 评论(0) 推荐(0) 编辑
摘要: bfs的难点在于怎么去表示一个问题的状态【也就是如何去判重】 对于这种情况,每个状态有【守卫当前状态】、【已有钥匙】、【位置r和c】和【已花时间】。那么对于判重来说,我们记录守卫、钥匙、位置这三个状态就行了。(比如说一个位置可以重复走,因为可能拿了钥匙后再走回来;一个位置可以重复走,因为可能在这个点 阅读全文
posted @ 2018-07-26 22:56 4397 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 反正想清楚了就开始枚举吧,需要拿纸和笔推一些公式。 我们想要m层的蛋糕有体积为N,那就枚举每一层蛋糕的半径和高度。其中第i层的蛋糕要比第i-1层的蛋糕半径和高度都大,第一层的蛋糕最小。 发现dfs中要带四个参数,dfs(level,remainVolumn,maxRadius,maxHeight)代 阅读全文
posted @ 2018-07-26 12:24 4397 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 其实这个转移方程比较简单,每次枚举最后一个完成的作业就行了。 转移方程是 dp[i] = min{ dp[ i - (1<<(k-1)) ] + score(i,k) } score(i,k)是完成i这么多作业中最后一个完成的作业是k时,k带来的最小扣分值。 难点在于字典序输出方案,我建了个ans数 阅读全文
posted @ 2018-07-26 10:04 4397 阅读(1090) 评论(0) 推荐(0) 编辑
摘要: 该死的题让我想起来艾斯之死... 首先想到dp(i)代表从1到【i表示的这些岛屿】所花的最小时间,然后每次枚举最后一个岛屿以此缩小范围,但发现枚举了最后一个岛屿后没有办法转移,因为不知道倒数第二个岛屿是什么,随着倒数第二个岛屿的不同,时间的增加也会不同,也就是不具备【无后效性】。 因此想到再加一个参 阅读全文
posted @ 2018-07-25 22:08 4397 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 高精度写了半天 dp[i][j]代表前i个数字放j个加号的最小值。转移的时候枚举在第k个数字后放加号,那么k最大在i-1后放加号,最小在第j个数后面放加号。 O(i^2 * j)复杂度 阅读全文
posted @ 2018-07-25 00:47 4397 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 主要不好想到定义问题状态,一开始想枚举第一次股票交易的卖出时间【这样O(1)处理第一次买入时间,logN处理第二次最大利益(第二次交易实际上是取最大值,所以可以用堆维护)】,但T*N*logN就tle了。 正解是dp1(i)代表1-i天一次交易的最大收益;再dp2(i)代表i-n天的最大收益。 以d 阅读全文
posted @ 2018-07-24 12:29 4397 阅读(475) 评论(0) 推荐(0) 编辑