动态规划
dezhonger
这个作者很懒,什么都没留下…
展开
-
Leetcode1444
每次沿着水平或者垂直切一刀,将左边或上边的分给别人,剩余的保留,要求每次切出的必须包含至少一个字母'A',最后剩余的也必须包含字母'A',求有多少种切法 思路: 由于每次保留的都是右下角的那一块,我们设计这样的dp状态 dp[i][j][k]表示剩余的左上角坐标是(i, j)当前共有k块的方法数 状态转移是每次从水平切一刀,或者垂直切一刀。两块都必须包含字母'A',这个可以用二维前缀和来做 final int mod = 10_0000_0007; int[][...原创 2020-05-18 23:54:11 · 173 阅读 · 0 评论 -
Leetcode 629
题意 题目链接 从111到NNN一共NNN个数组成的一个数组,求逆序对为mmm的方法数有多少个 思路 动态规划 定义dp[i][j]dp[i][j]dp[i][j]表示前iii个数(也就是111到iii)组成的数组中逆序对为jjj的方法数,考虑把数字i+1i+1i+1放置在数组的最前面,那么会增加iii个逆序对;如果放在第一个数之后,会增加i−1i-1i−1个逆序对,以此类推,如果放置在最后,那么...原创 2020-04-26 00:27:00 · 241 阅读 · 0 评论 -
Leetcode 446
给了一个数组,求等差数列有多少个,要求等差数列的长度至少为3. 比如: Input: [2, 4, 6, 8, 10] Output: 7 Explanation: All arithmetic subsequence slices are: [2,4,6] [4,6,8] [6,8,10] [2,4,6,8] [4,6,8,10] [2,4,6,8,10] [2,6,10] 数组长度N...原创 2020-03-01 16:21:30 · 194 阅读 · 0 评论 -
Leetcode837
参考了:https://zhuanlan.zhihu.com/p/86167813 题意:初始是0点,每次可以从[1, W]中随机出一个数字,累加上去,直到自己的点数 > K, 求这个时候点数 <= N的概率 我们使用动态规划来做: dp[i]表示我们达到点数为i的概率,注意到当 i >= K + W的时候 , dp[i] = 0, 考虑dp[i]怎么求,点...原创 2020-02-09 19:52:43 · 419 阅读 · 0 评论 -
Leetcode808
有两个瓶子A和B分别有N毫升水, 每次可以进行下面四种操作之一 Serve100 ml of soup A and 0 ml of soup B Serve75 ml of soup A and 25ml of soup B Serve 50 ml of soup A and 50 ml of soup B Serve 25ml of soup A and 75ml of so...原创 2020-02-08 20:57:08 · 163 阅读 · 0 评论 -
Leetcode1223
给出每个点数不能连续出现的次数,求可能的方法数 动态规划: dp(i, j, k)表示掷第i骰子的时候,是j点,并且j连续出现k次的方法数, dp(i, j, k) = dp(i - 1, j, k - 1) k > 1 dp(i, j, k) = sum(dp(i - 1, j', x)), k =1, j != j', x是任意值 第二个递推式编码的时候注意维...原创 2020-02-05 22:35:33 · 111 阅读 · 0 评论 -
Leetcode 801
给出两个数组,可以交换对应位置的数,问最少交换几次可以让两个数字都递增 ,题目保证存在有解。 sol: dp解决,f[i]表示不交换第i位使前i位递增的最少交换次数,g[i]表示交换第i位使前i位递增的最少交换次数 public int minSwap(int[] A, int[] B) { //f[i] 不交换第i位的最小交换次数 //...原创 2020-01-29 03:11:23 · 184 阅读 · 0 评论 -
Leetcode688
在一个N×N的棋盘上(r, c)处有一个骑士,每一次等概率在棋盘上沿"马"字型跳,当跳了K次后,或者跳出棋盘就停止,问最后停在棋盘上的概率 sol:dp dp[i][j][k]表示在第i次,在棋盘的(j, k)处的概率 八个方向转移即可 public double knightProbability(int N, int K, int r, int c) { ...原创 2020-01-08 23:13:10 · 157 阅读 · 0 评论 -
Leetcode1301
一个网格,每个网格有个数字或者是障碍无法走过去,从右下角走到左上角,可以向左向上或斜着走一步, 求出路径最大的和值和获得最大路径和的路径条数. 动态规划:用两个dp数组分别维护最大的和,然后同时更新获得最大的和的路径数。 具体看代码 private static final int[][] DIRS = new int[][]{{0, -1}, {-1, 0}, {-1, ...原创 2019-12-29 22:05:44 · 108 阅读 · 0 评论 -
Leetcode 1049 背包dp
https://leetcode-cn.com/problems/last-stone-weight-ii/ 注意到: 其实等价于把石子分为两堆,求他们差的最小值,这就是一个裸的背包dp了 public int lastStoneWeightII(int[] stones) { int sum = Arrays.stream(stones).sum(); ...原创 2019-05-19 12:36:48 · 413 阅读 · 0 评论 -
bzoj2748 [HAOI2012]音量调节
Description 一个吉他手准备参加一场演出。他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量。在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改变的音量是多少。每一次改变音量,他可以选择调高也可以调低。 音量用一个整数描述。输入文件中给定整数beginLevel,代表吉他刚开始的音量,以及整数maxLevel,代表吉他的最大音量。音量不能小...原创 2019-05-08 23:46:22 · 96 阅读 · 0 评论 -
LOJ1417
题目链接:https://www.luogu.org/problemnew/show/P1417 复制一下别人的题解: 如果没有b[i]这个属性的话就是明显的01背包问题。 现在考虑相邻的两个物品x,y。假设现在已经耗费p的时间,那么分别列出先做x,y的代价: a[x]-(p+c[x])*b[x]+a[y]-(p+c[x]+c[y])*by a[y]-(p+c[y])*b[y...原创 2019-05-01 03:15:58 · 92 阅读 · 0 评论 -
LOJ1220 关路灯
题目链接: https://www.luogu.org/problemnew/show/P1220 区间dp: dp[i][j][0/1]表示关闭区间[i,j]的最低消耗,第三维表示当前是在i位置还是在j位置 举个例子:比如要计算dp[i][j][0](当前在i位置),那么可以由dp[i+1][j][0]转移过来或者由dp[i+1][j][1]转移过来 如果由dp[i+1][...原创 2019-05-08 22:08:34 · 146 阅读 · 0 评论 -
LOJ1373 小a和uim之大逃离
题目链接:https://www.luogu.org/problemnew/show/P1373 动态规划: dp[i][j][k][0/1] 表示在点(i, j)时,两人得分之差为k,第四维表示当时是a选还是b选 的方法数 然后转移即可,方程看代码吧。 注意到k先加一,题目实际上是要对k+1取模。 #include <vector> #include <...原创 2019-05-04 02:38:29 · 91 阅读 · 0 评论 -
LOJ1005 矩阵取数游戏
题目链接:https://www.luogu.org/problemnew/show/P1005 注意到每行是独立的,我们可以分别处理在求和。 dp[i][j]表示当前区间为[i,j]的最大值,那么有如下方程 cnt是当前取数的次数 dp[i][j] = max(dp[i+1][j] + a[i] * pow(2, cnt), dp[i][j-1] + a[j] * pow(2...原创 2019-05-03 17:48:24 · 108 阅读 · 0 评论 -
LOJ1026 统计单词个数
题目链接:https://www.luogu.org/problemnew/show/P1026 dp[i][j]表示前i个字母分为j份的单词个数 预处理出s[i][j],表示从s[i, i+1, i+2...j]能分为的单词个数 #include<iostream> #include<algorithm> #include<cstdio&g...原创 2019-05-03 16:43:25 · 167 阅读 · 0 评论 -
LOJ1541
题目链接:https://www.luogu.org/problemnew/show/P1541 题解:dp dp[i][j][k][o] 表示用了i个类型1的卡片,j个类型2的卡片,3个类型3的卡片,4个类型4的卡片能获得的最大值. #include <vector> #include <list> #include <map> #incl...原创 2019-05-03 16:16:54 · 109 阅读 · 0 评论 -
LOJ1855
二维背包问题: #include <vector> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <bitset> #include ...原创 2019-05-02 20:25:25 · 62 阅读 · 0 评论