DP
Mavis code
这个作者很懒,什么都没留下…
展开
-
HDU 3709 - Balanced Number(数位DP)
题意: 一个数的中心两边的力矩相等的数就是一个Balanced Number ,给定 闭区间,问这个区间有多少个这样的数。 思路: 枚举中心点,也就是支点。这道题会受到前导0的影响,但是由于满足的条件是支点左右两边和相等,所以前导0计算进去的只有00,000,0000等(不包括0)。最后从所得到的答案中减去这些情况就可以了。 具体细节,看代码注释。AC code:#includ...原创 2018-08-22 11:46:26 · 119 阅读 · 0 评论 -
简单DP-CF-C. Basketball Exercise
题目传送门我被坑了,再次纪念一下这道题。AC code:#include<bits/stdc++.h>// #include<iostream>// #include<cstdio>// #include<vector>// #include<cstring>using namespace std;#define per...原创 2019-07-19 21:34:46 · 194 阅读 · 0 评论 -
CF教育场69-D(好题)-Yet Another Subarray Problem-动态规划-
题目传送门题解:考虑dp的做法,dp[i][j]代表以第i个数为右端点,长度求余m的值为j时的最大值。转移方程:dp[i][j]=dp[i-1][j-1]+aidp[i][j]=max(dp[i-1][m-1]+a[i]-k,a[i]-k)(j==0)AC code:#include<bits/stdc++.h>#define per(i,a,b) for(int i = ...原创 2019-07-23 21:03:10 · 725 阅读 · 8 评论 -
Comet OJ - Contest #3子序列子序列子序列...
Comet OJ - Contest #3子序列子序列子序列…不是我的代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int max_n=5005;const int mod=1e9+7;int dp[2][14][max_n];int nf;int n,m,a[max_...原创 2019-05-11 11:01:33 · 249 阅读 · 0 评论 -
动态规划-跳一跳(构造法)-算法课-精华版
(3)M排N列的木桩,从第一排开始跳到最后一排。每次跳到下一排的同一列、前一列或后一列木桩。 设R[i,j]为跳到i排j列木桩的奖金。求从第一排跳到最后一排获得的奖金总量的最大值,给出递推方程。(4)上述问题,如果允许在同一排向左或向右跳,且横跳总次数不超过H,给出求奖金总量的最大值的递推方程(5)如果每个木桩只有第一次跳上去的时候有奖金,如何求最大值第4题相对简单,所以放在文章...原创 2019-04-08 21:26:05 · 442 阅读 · 0 评论 -
计数DP-牛客41B-666RPG
题目传送门思路:这道题的状态转移方程比较简单,不过要处理负数还有空间优化。因为数组不能太大,所以只能保存当前的状态,和前一个状态,所以使用dp[i][j],i == 1是表示当前状态,i==0表示前一个状态。j就是表示当前的分数。因为j可能为负数所以要处理一下。dp[i][j],前面的i只有0,1两种取值,使用了滚动数组,保存了当前状态,和上一层状态j表示当前的分数。这里要处负数的情况...原创 2019-03-02 14:11:24 · 104 阅读 · 0 评论 -
树形DP-Apple Tree
题目传送门(详细思路)思路参见:https://www.cnblogs.com/fightfordream/p/6653890.htm这道题想了好久才想明白。。。。。。做这种难度的题对自己还是很有收获的。/*个人理解 :首先 这道题要每个节点的权值是x的倍数。因为每个节点都要相等,所以有倍数关系,那么当前节点u的权值必然是其子节点倍数的最小公倍数。比如其子节点为2n == 4m == 3...原创 2019-03-05 16:28:50 · 107 阅读 · 0 评论 -
UVA 12563 - 背包问题的注意问题
这道题就是背包问题。但是我在一维数组(滚动数组)和二维数组上没理解清楚,导致出现了bug,找了好久才想出来。二维数组做法:#include<iostream>#include<cstdio>#include<algorithm>#include<vector>#include<set>#include<stack&g...原创 2019-02-01 15:26:10 · 206 阅读 · 0 评论 -
Timetable-DP-CF946D(好题)
题目传送门思路:DP#include<iostream>#include<cstdio>#include<algorithm>#include<vector>#include<set>#include<stack>#include<queue>#include<map>原创 2019-01-26 12:35:01 · 285 阅读 · 0 评论 -
牛客第一场-动态规划-小a与星际探索
这道题是典型的背包问题。本题要注意的是异或运算的性质。细节见代码注释。#include<iostream>#include<cstdio>#include<algorithm>#include<vector>#include<set>#include<stack>#include<queue>原创 2019-01-25 15:14:12 · 251 阅读 · 0 评论 -
Ayoub and Lost Array- DP - Codeforces Round #533 (Div. 2)
题目传送门题意:一个个数为n的整数列,要你重构,从[l,r]中选取整数,使得最后的序列元素之和是3的倍数。问你整数列有多少种可能,结果mod(1e9 + 7)?思路:首先,n<=2e5,1<= l,r<=1e9,注意数据范围。这是一个多阶段决策问题,所以自然想到DP。两个状态就是徐去了几个数,mod3的余数,所以dp数组是二维的。dp[i][j]表示选取选取了i个数后...原创 2019-01-24 16:44:47 · 162 阅读 · 0 评论 -
Think myself - 无后效性(贪心+DP)
最近做了一些题,让我对之前我的思维方式产生很大的质疑。我也通过这些问题,思考我之前的思维方式,做出自己的反思,提出新的思维方式。先通过一道题引入。简单解决问题固然简单,关键是我们要发现背后的通性,思想的奥秘。题目传送门题意:一个工厂生产一个物品,每天的生产成不尽相同,要求的产量也不尽相同。后面的产品可以在之前的时间生产,但是每天的存储费用固定为S。要你求最小的成本。思路:贪心记录最小...原创 2018-11-30 17:01:28 · 886 阅读 · 0 评论 -
POJ-1742-Coins-优化的多重背包
题目传送门题意:有n种硬币,这n种硬币的价值为coin[i].val,第i种硬币的个数为coin[i].num个,问能用这些硬币支付多少不超过m的价格?思路:多重背包裸题,但是要进行空间和时间上的优化,否则会MLE和TLE。空间优化:通过特定的顺序滚动数组,来降维。具体可以参考背包九讲时间优化:一般的多重背包有3重循环,i,j,k-种类,价值,数量。这里优化掉数量那一重循环。具体细节看...原创 2018-11-18 12:17:26 · 151 阅读 · 0 评论 -
数位DP-x%f(x)-状态变换
题目传送门题意:给你一个闭区间,要你求出这个区间满足数值%(各位数字之和)==0数的个数。思路:数位DP,首先想到的是3个状态变量确定唯一一个状态,dp[pos][sum][num]-前pos位,数字之和为sum,数值为num。这种比较易想出,但是由于num的范围太大,会爆内存,所以需要确定另外的状态变量和状态 。于是另外一种节省内存的DP是:dp[pos][sum][num][mod...原创 2018-11-01 17:32:12 · 143 阅读 · 0 评论 -
动态规划DP-背包问题-ACM
首先上一个神级的教程,背包九讲这个教程讲解详细,读懂了大有裨益。还有一篇比较有帮助:https://www.cnblogs.com/Christal-R/p/Dynamic_programming.html首先是一个完全背包问题(恰好装满):https://vjudge.net/contest/263202#problem/AAC code:#include<bits/stdc++...原创 2018-10-25 17:22:02 · 154 阅读 · 0 评论 -
Maximum Subrectangle-Codeforces Round #513-C-简单DP
题目传送门题意:在一个矩阵中寻找一个子矩阵,并且子矩阵的权值小于给定的数,使得它的面积最大。输出面积的最大值。思路:首先是推导的过程,我是看别人思路的,而且不会在这里写数学公式,所以就给传送门,还请大家原谅。推导过程传送门首先,用前缀和记录。然后枚举特定长度的和的最小值(这就是最优子结构性质)。a,b两个数组可以分开枚举,这是推导出来的,并且由于他们任意两个位置都可以相乘,所以就不用考虑...原创 2018-10-05 20:19:20 · 133 阅读 · 0 评论 -
HDU 4734(数位dp)- F(x)
具体思路看代码注释。AC code:/*思路:数位dp。主要在于状态转移不好想。dp[i][j]表示i位数比j小的数的个数。用递归完成的话就只需要思考边界和状态转移。边界:dp[i][j]如果j小于0,显然是dp[i][j]=0的,如果i==0,说明就是0,显然任何数都比0大,所以dp[i][j]对于j>=0的时候dp[i][j]=1,否则dp[i][j]=0。状态转...原创 2018-08-21 15:46:11 · 127 阅读 · 0 评论 -
codeforces 55D D. Beautiful numbers(数位dp+数论)
题目传送门: codeforce 55D 题意简单就不说了 思路: 要用到数论的知识。详细解释,推荐一个网址:传送门 注意hash的方式有很多种。hash的目的是为减少空间浪费了。 话不多说,上代码。AC code:#include<iostream>#include<cstdio>#include<cstring>#include&l...原创 2018-08-22 14:26:12 · 288 阅读 · 0 评论 -
2019中秋节上海网络赛-J-Stone game(背包)
题面:思路:枚举集合s’的最小值,确定出剩下s’集合的和的范围。∵S′+S+min=Sum\because S' + S + min = Sum∵S′+S+min=Sum∵S′−min<=S\because S' - min <= S∵S′−min<=S∵S′+min>=S\because S&...原创 2019-09-15 22:28:34 · 155 阅读 · 0 评论