dp
飞翔的大胖兔子
这个作者很懒,什么都没留下…
展开
-
动态规划总结与题目分类
源博客链接:http://blog.csdn.net/cc_again/article/details/25866971动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力、建模抽象能力、灵活度。动态规划(英语:Dynamic programming,DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复...转载 2018-04-10 13:18:32 · 143 阅读 · 0 评论 -
计蒜客网络赛 copy and submit
#include<bits/stdc++.h>using namespace std;typedef long long ll;int n,k,j,i;bool isPrime( ll n ){ if (n <= 3) { return n > 1; } if ( n % 2 == 0 || n % 3 ==...原创 2018-04-23 19:30:49 · 125 阅读 · 0 评论 -
zipper poj2192 字符串上的dp
题意:给你三个字符串,问你能否由前两个合成第三个,且要求不改变前两个字符串的顺序。题目保证第三个字符串的长度为前两个字符串的长度之和。 题解:此题用暴力,深搜都可以过(数据太水)。这里给出DP的解法。dp[i][j](bool 型)代表第一个字符串的前i个字符和第二个字符串的前j个字符能否合成第三个字符串的前i+j个字符串。则状态转移方程为:1 if(dp[i-1][j]&&s1[...原创 2018-04-24 10:59:55 · 103 阅读 · 0 评论 -
hdu 2765 递推回文串
Recursively Palindromic PartitionsTime Limit: 1000 ms /Memory Limit: 32768 kbDescriptionA partition of a positive integer N is a sequence of integers which sum to N, usually written with plus signs be...原创 2018-05-02 17:27:02 · 261 阅读 · 0 评论 -
ACM_数位DP
引言数位DP: 与记数有关的一种动态规划, 一般题目是 : 求0 ~ n 之间有多少个符合….条件的数, 或者l ~ r 之间有多少个符合条件的数, 第二种一般来说可以转化到第一种[0, r] - [0, l) = [l, r] 这类问题通常会和取模, 记数, 数字和, 等运算联系在一起; 本文将以: 1.数位DP的所用定理(其实就一个同模) 2.数位DP的状态, 状态转移, 初始化 3.数位DP...原创 2018-04-20 19:57:32 · 260 阅读 · 0 评论 -
多重部分和题
#include<bits/stdc+.h>using namespace std;bool dp[1000][10000];struct {int val,num}a[1000];int main(){ int n,m,i,j,k,tot; cin>>n>>tot; memset(dp,false,sizeof(dp...原创 2018-04-20 22:03:07 · 146 阅读 · 0 评论 -
省赛训练3 A Simple Math Problem 矩阵快速幂优化 hdu1757
A Simple Math ProblemTime Limit: 1000 ms /Memory Limit: 32768 kbDescriptionLele now is thinking about a simple function f(x).If x < 10 f(x) = x.If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 *...原创 2018-04-21 22:16:31 · 135 阅读 · 0 评论 -
最长上升子序列(LIS)长度的O(nlogn)算法 hdu 1950 Bridging signals
http://acm.hdu.edu.cn/showproblem.php?pid=1950===================================最长上升子序列(LIS)的典型变形,熟悉的n^2的动归会超时。LIS问题可以优化为nlogn的算法。定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序列,则记录最小的那个最末元素。注意d中元素是单调递增的,下面要用到...原创 2018-04-25 19:18:22 · 117 阅读 · 0 评论 -
uva11584 dp最少回文串划分
#include<iostream>#include<cstdio>#include<cstring>using namespace std;char str[1010];int flag[1010][1010];int dp[1010];int l;const int INF=0x3f3f3f3f;void pre(){ /*令flag[...原创 2018-04-26 21:55:35 · 213 阅读 · 0 评论 -
斜率优化DP和四边形不等式优化DP整理
当dp的状态转移方程dp[i]的状态i需要从前面(0~i-1)个状态找出最优子决策做转移时 我们常常需要双重循环(一重循环跑状态 i,一重循环跑 i 的所有子状态)这样的时间复杂度是O(N^2)而 斜率优化或者四边形不等式优化后的DP可以将时间复杂度缩减到O(N)O(N^2)可以优化到O(N) ,O(N^3)可以优化到O(N^2),依次类推斜率优化DP和四边形不等式优化DP主要的原理就是利用斜率或...原创 2018-04-27 20:20:16 · 189 阅读 · 0 评论 -
动态规划详解 转自瞿老师的博客
目录 一、动态规划初探 1、递推 2、记忆化搜索 3、状态和状态转移 4、最优化原理和最优子结构 5、决策和无后效性 二、动态规划的经典模型 1、线性模型 2、区间模型 3、背包模型 4、状态压缩模型 5、树状模型三、动态规划的常用状态转移方程 1、1D/1D 2...原创 2018-05-13 20:50:16 · 467 阅读 · 0 评论 -
hdu1003 max sum
Max SumTime Limit: 1000 ms / Memory Limit: 32768 kbDescriptionGiven a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-...原创 2018-07-20 16:15:51 · 141 阅读 · 0 评论 -
acm平面/体问题
hdu 2050(1) n条直线最多分平面问题 题目大致如:n条直线,最多可以把平面分为多少个区域。 析:可能你以前就见过这题目,这充其量是一道初中的思考题。但一个类型的题目还是从简单的入手,才容易发现规律。当有n-1条直线时,平面最多被分成了f(n-1)个区域。则第n条直线要是切成的区域数最多,就必须与每条直线相交且不能有同一交点。这样就会得到n-1个交点。这些交点将第n条直...原创 2018-07-15 16:10:58 · 179 阅读 · 0 评论 -
三国佚事——巴蜀之危 全送错信件问题
Description话说天下大势,分久必合,合久必分。。。却道那魏蜀吴三国鼎力之时,多少英雄豪杰以热血谱写那千古之绝唱。古人诚不我欺,确是应了那句“一将功成万骨枯”。 是夜,明月高悬。诸葛丞相轻摇羽扇,一脸愁苦。原来是日前蜀国战事吃紧,丞相彻夜未眠,奋笔急书,于每个烽火台写下安排书信。可想,这战事多变,丞相运筹 帷幄,给诸多烽火台定下不同计策,却也实属不易。 谁成想这送信小厮竟投靠...原创 2018-08-04 14:13:38 · 948 阅读 · 0 评论 -
斜率优化dp小结
单调队列优化在写斜率优化之前,我们来回顾一下单调队列优化的dp 1. 对于如下形式的dp方程 dp[i]=min{dp[j]+f(j)}(0<j<i)dp[i]=min{dp[j]+f(j)}(0<j<i)我们直接用一个变量维护(0, i)中dp[j] + f(j)的最小值即可 2.对于如下形式的dp方程 dp[i]=min{dp[j]+f(j)...原创 2018-08-06 17:56:25 · 215 阅读 · 0 评论 -
hdu2191 多重背包
看着背包九讲做的,本来想的优化得特别难,然后用01的想法做了一下,竟然1A了代码如下#include<bits/stdc++.h>using namespace std;int t,nvalue,nkind,value[105],weight[105],bag[105],dp[105];int main(){ scanf("%d",&t); whi...原创 2018-04-13 21:42:28 · 142 阅读 · 0 评论 -
多重背包问题:O(VN)
多重背包问题:有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件。怎样装才能使背包内的物品总价值最大? 网上关于“多重背包”的资料倒是不少,但是关于怎么实现O(N*V)算法的资料,真得好少呀,关于“单调队列”那部分算法,又没说明得很清楚,看了几遍没看懂原理,只好自己动脑去想怎么实现O(N*V)算法。 若用F[i][j]表示对容量为j的背包,处理完前i种物品后,...转载 2018-04-13 20:34:31 · 324 阅读 · 0 评论 -
背包问题
P01: 01背包问题 题目 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max...转载 2018-04-10 17:00:43 · 130 阅读 · 0 评论 -
hdu 2084 数塔
很简单的一道dp#include<iostream>#include<string.h>using namespace std;int dp[100][100],a[100][100];int main(){ int n,i,j,h; cin>>n; while(n--) { cin>>h; mem...原创 2018-04-10 19:09:35 · 69 阅读 · 0 评论 -
hdu2041 超级楼梯
水水更健康#include<iostream>#include<string.h>using namespace std;int dp[100],a[100];int main(){ int n,i,j,h; cin>>n; dp[2]=1; dp[3]=2; for(i=4;i<42;++i) { dp[i]...原创 2018-04-10 19:15:30 · 68 阅读 · 0 评论 -
codeforce 429 div.2 D
要注意方向D. Working outtime limit per test 2 secondsmemory limit per test 256 megabytesinput standard inputoutput standard outputSummer is coming! It's time for Iahub and Iahubina to work out, as they bot...原创 2018-04-10 20:25:19 · 104 阅读 · 0 评论 -
1159最长公共子序列
Common SubsequenceTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 32693 Accepted Submission(s): 14786Problem DescriptionA subsequence of a gi...原创 2018-04-16 19:30:58 · 130 阅读 · 0 评论 -
zoj3747
还是太naive,刚学dp 对于这种方式还是不熟悉先把问题都转化成至多连续的情况:至多k个连续R,至多n个连续G情况 【减去】至多k个连续R,至多(m-1)个连续G情况。至多的情况比较好考虑,至少的情况比较复杂,比赛的时候一直落在至少的圈子里,没想到用递推。//dp[i][0]表示第i个为G,至多有u个连续G,至多有v个连续R的个数 //这里的u和v固定//dp[i][1]表示第i个为R,......原创 2018-04-11 19:32:52 · 346 阅读 · 0 评论 -
第八届山东省acm省赛dp
Problem DescriptionLYD loves codeforces since there are many Russian contests. In an contest lasting for T minutes there are n problems, and for theith problem you can get ai−di∗ti points, where ai in...原创 2018-04-17 19:45:56 · 152 阅读 · 0 评论 -
hdu dp题集
DP是难点,供自已以后系统学习。1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.PHP?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱 最脑残的是把总的概率以为是抢N家银行的概率之和… 把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].mone...转载 2018-04-17 19:51:25 · 338 阅读 · 0 评论 -
计数dp 划分数 多重集组合数
挑战程序设计竞赛划分数:把n个无区别的物品划分成不超过m组。dp[i][j]=j的i划分的总数。dp[i[j]=dp[i][j-i]+dp[i-1][j] 即:将j个物品分成i份,有两种情况:每份划分都大于等于1 dp[i][j-i]; 存在有一份以上用0划分dp[i-1][j]int main(){ int n,m; cin>>n>>m; dp...原创 2018-04-17 20:33:13 · 297 阅读 · 0 评论 -
[组合数学] 第一类,第二类Stirling数,Bell数
一.第二类Stirling数 定理:第二类Stirling数S(p,k)计数的是把p元素集合划分到k个不可区分的盒子里且没有空盒子的划分个数。 证明:元素在拿些盒子并不重要,唯一重要的是各个盒子里装的是什么,而不管哪个盒子装了什么。 递推公式有:S(p,p)=1 (p>=0) S(p,0)=0 (p>=1) S...转载 2018-04-17 20:47:23 · 210 阅读 · 0 评论 -
hdu 1864 最大报销额
最大报销额Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 29727 Accepted Submission(s): 9115Problem Description 现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A...原创 2018-04-12 20:28:03 · 112 阅读 · 0 评论 -
hdu2602 01背包
基本的背包问题,掉了一个dp【v】的情况Bone CollectorTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 75979 Accepted Submission(s): 31486Problem Description Many...原创 2018-04-12 21:25:23 · 104 阅读 · 0 评论 -
hdu2159 FATE 完全背包问题
FATETime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11420 Accepted Submission(s): 5407//https://blog.csdn.net/mikasa3/article/details/5141862...原创 2018-04-12 21:55:44 · 209 阅读 · 0 评论 -
区间dp 石子归并问题
今天偷玩电脑,就学了几个模板题,水一水吧~描述: 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小值。分析:要求n个石子归并,我们根据dp的思想划分成子问题,先求出每两个合并的最小代价,然后每三个的最小代价,依次知道n个。定义状态dp [ i ] [ j ...原创 2018-04-18 21:17:34 · 254 阅读 · 0 评论 -
楼天成 男人八题 多重背包问题O(VN)
题意:n种硬币,每种有A[i]个,面值分别为C[i]求在[1,m]之间能组成多少种不同的面值. 解:装箱问题谁都会写,但我原来写的一直是三重循环,关键在于每种有A[i]个,从而将每种硬币又循环了A[i]次.其实只需开一个数组p[v],表示达到v体积当前面值硬币至少用多少枚,只需满足p[v-C[i]]+1<=A[i]即可,从而砍掉一重循环,复杂度将为O(nm).#include<...原创 2018-04-13 20:30:35 · 1420 阅读 · 0 评论 -
排列组合问题
转载自:https://blog.csdn.net/qwb492859377/article/details/50654627求,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论。1.球同,盒不同,无空箱C(n-1,m-1), n>=m0, n<m使用插板法:n个球中间有n-1个间隙,现在要分成m个盒子,而且不能有空...转载 2018-11-23 16:53:55 · 865 阅读 · 0 评论