![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
文章平均质量分 61
Always_ease
这个作者很懒,什么都没留下…
展开
-
动态规划 2017计算机学科夏令营上机考试 E:怪盗基德的滑翔翼
点击打开链接用dfs。。。咳咳,超时了超时代码: #include<iostream>#include<string.h>using namespace std;int lou[105];int ans;int n;void moveleft(int p,int count){ if (p<=0) { if (count>ans) a...原创 2018-05-23 17:42:59 · 233 阅读 · 0 评论 -
动态规划 NOI 1481:Maximum sum——顺着倒着各求一次最大连续子序列和
点击打开链接#include<iostream>#include<algorithm>#include<string.h>using namespace std;int a[50001],dpleft[50001],lmax[50001],dpright[50001],rmax[50001];int main(){ int times,n,i,an...原创 2018-05-30 16:25:53 · 568 阅读 · 0 评论 -
动态规划 NOI 1996:登山——正序、逆序各求一次最大上升子序列长
点击打开链接注意两点:1、不能从头开始找逆序列2、max函数在oj上貌似有冲突(使用了algorithm头文件的情况下)#include<iostream>#include<algorithm>#include<string.h>using namespace std;int a[1001],lmax[1001],rmax[1001];int main...原创 2018-05-30 17:23:13 · 584 阅读 · 0 评论 -
【模板题】动态规划 NOI 90 滑雪——记忆化搜索(BFS+剪枝)
90:滑雪题目大意:R*C的方格每个有一个数字,求最大递减路径长度思路:对每一个点,求它的最长路径,且保存每一个中间结果,之后再需要求时及时剪枝。AC代码:#include<iostream>#include<string.h>using namespace std;int dp[101][101],a[101][101];int R,C;int dx[4]={1...原创 2018-06-06 17:06:51 · 582 阅读 · 0 评论 -
【模板题】动态规划 NOI :1775:采药 —— 01背包问题
点击打开链接#include<iostream>#include<algorithm>#include<string.h>using namespace std;int dp[101][1001]={0};struct P//结构体的编写方法{ int t,val; bool operator < (const P &a)const...原创 2018-05-31 15:34:21 · 437 阅读 · 0 评论 -
动态规划 6049:买书——两种思路,简单的整数划分和完全背包求方案总数
6049:买书思路1:类似简单的整数划分问题,把n个整数划分为4个固定的整数#include<iostream>#include<string.h>using namespace std;int dp[1001][101],a[101]={0,10,20,50,100};int main(){ int n,i,j; cin>>n; if(n%10...原创 2018-06-07 15:10:06 · 516 阅读 · 0 评论 -
动态规划 NOI 8782:乘积最大——类似post office
8782:乘积最大题目大意:一个长度为n的数字串,加k个乘号能够得到的最大值dp[i][j],在1~i个字符中插入j个乘号所得最大值sum[i][j],i~j个字符组成的数字注意:初始化dp[i][0]=sum[1][i]#include<iostream>#include<string.h>#include<limits>#include<stri...原创 2018-06-07 16:34:55 · 390 阅读 · 0 评论 -
【模板题】动态规划 8786:方格取数 ——多重dp
8786:方格取数题目大意:从(0,0)出发走到(N,N),重复走两次,求能获得的最大值(经过一次则清零)思路:双重dp,两次局部最优不等于全局最优,复杂度O(N^3)#include<iostream>#include<string.h>using namespace std;int dp[11][11][11][11],a[11][11];int N;int ...原创 2018-06-07 16:49:25 · 574 阅读 · 0 评论 -
【难题】动态规划 NOI 162:Post Office 7624:山区建小学——找状态方程有点难 思路详细
题目:点击打开链接dp[i][j]:表示在1~i个村庄中建j个邮局时的路径最小值 m[i][j]:表示从i到j只建立一个邮局的路径的最小值若从第i个村庄到第j个村庄只选取一个作为邮局的话则选择第(i+j)/2个一开始我没懂,直到自己画了个图,假设把在5建的邮局移到4,则其他村庄的距离变化如图,从4到3不会变化,所以除法向下取整不会有问题。则状态转移方程:m[i][j]=m[i][j-1]+a[i]...原创 2018-05-31 17:11:01 · 1685 阅读 · 2 评论 -
动态规划 NOI 2988:计算字符串距离
点击打开链接题目大意:两种操作:修改/删除一个字符,操作所需要的次数定义为两个字符串的距离,求最小距离思路参考:点击打开链接一开始想复杂了,以为删除则会导致后续序列发生改变,把删除的次数作为第三维度的状态。后来发现不需要。因为删除一个字符之后相当于回到dp[i-1][j]的状态或者dp[i][j-1]的状态,而i,j是继续向后递加的。相当于略过第a[i]或者b[j]了,下一个比较a[i+1]or ...原创 2018-05-31 19:43:22 · 330 阅读 · 0 评论 -
动态规划 2017大数据研究中心夏令营上机考试 E:开餐馆
dp[i]表示在i处开餐馆能够获得的最大利润。一开始想错思路了,以为是0/1背包问题,怎么都套不上。。。实在想不通去百度,发现应该类似最大子序列和,条件由相邻变成相隔k事实证明建模真的很重要 T T#include<iostream>#include<string.h>using namespace std;int m[101],p[101],dp[101];voi...原创 2018-05-31 21:29:37 · 292 阅读 · 1 评论 -
动态规划 NOI 2985:数字组合 ——01背包变形
点击打开链接题目大意:求n个整数中两两和为t的组合数目一开始没想用dp,以为排个序然后从两头扫描即可,后来发现题目并没有说数字是唯一且只使用一次。那么用这个方法会出错。如2 2 3 3有4种,遍历方法只能算出2种。2 2 2 3 3 3有9种,错误方法只能算出3种动态规划:dp[i][j]代表前第i个数,可以组成j的组数#include<iostream>#include<al...原创 2018-06-01 17:38:44 · 613 阅读 · 0 评论 -
【水题】 动态规划
太简单了。。。点击打开链接#include<iostream>using namespace std;int main(){int n,i;cin>>n;int dp[21];dp[1]=1;dp[2]=2;for (i=3;i<=n;i++)dp[i]=dp[i-1]+dp[i-2];cout<<dp[n];return 0;}...原创 2018-05-30 15:42:46 · 226 阅读 · 0 评论 -
【模板题】动态规划:简单的整数划分问题,复杂的整数划分问题——01背包变形
4117:简单的整数划分问题——01背包变形思路:dp[i][j]表示从1~j中选取数字能组成 i 的种类数初始化:dp[1][i]=1;//1+...+1=i dp[i][1]=1;//仅选1=1状态转移:1)i==j时,则dp[i][j]=dp[i][j-1]+1;//仅选取j组成和=i,一种情况 2)j>i,则第i+1,i+2,...,j 这些数没有用 ...原创 2018-06-06 17:01:12 · 1119 阅读 · 0 评论 -
【模板题】动态规划 NOI 2000:最长公共子上升序列
折磨人的一道题。。。花了一天时间。找ans不难,重点在保存序列。注意的地方在注释里。在理解题目的时候参考了点击打开链接,解释的很清楚。代码如下:#include<iostream>#include<algorithm>#include<string.h>#include<string>using namespace std;long lon...原创 2018-05-29 21:41:13 · 1919 阅读 · 0 评论 -
【难】动态规划 多多看DVD(加强版)——二维背包问题(及背包问题通解整理)
题目大意:N个碟片中选M个,总时间不能超过L,求最大价值 题目有好几个不大明白的地方:1、一开始用三维,总是只能拿10、20分,我估计原因是从i到i+1个物品的传递没有做好。(以后碰到二维背包就用倒序降维方法做吧,避免出错)2、初始化dp[j][1]会出错。后来想到dp[j][1]是存储了上一个维度的值,不可以初始化。(除非三维)背包问题整理如下:一维01背包问题通解:fo...原创 2018-06-02 21:26:44 · 689 阅读 · 1 评论 -
【模板题】动态规划 逃亡的准备——多重背包问题及二进制优化
题目大意:n个物品,容量v,每个物品有m个,每个体积w,每个价值s 点击打开链接超时代码:#include<iostream>#include<string.h>using namespace std;int w[2001],m[2001],s[2001],dp[501]={0};int main(){ int n,v,i,j,k,ans=0; cin&g...原创 2018-06-02 21:47:31 · 754 阅读 · 1 评论 -
【模板题】动态规划 3531 判断整除 2989:糖果——一定要装满的背包问题
点击打开链接题目大意:一串数字,每个前面加+or-,和能否整除k数学基础:1、a|=b 即a=a|b 其中|为位或运算(则a、b中有一个为true则a为true) a&=b 即a=a&b 其中&为位与运算2、模法分配律,即(a+b+c)%k=(a%k+b%k+c%k)%k技巧:1、右移100为负数腾空间(k<=100)2、dp[i][j]表示到第i个数模k...原创 2018-06-04 21:04:15 · 772 阅读 · 4 评论 -
动态规划 找啊找啊找GF ——二维01背包问题(需要仔细看题注意细节)
原题题目大意:在保证取得的物品(mm)最多的情况下耗费时间最小。两个限制条件(w1,w2),一个rmb一个rp需要两个dp数组,一个保存物品数量fp,一个保存物品最小耗时dp。由于是先要保证物品最多,所以需要两个判断条件:1、加上第i个物品后数量多于i-1时的则直接给dp赋值(不要比较取min)2、加上当前物品的数量和上一轮循环的一样,则需要比较更新dp注意:编码时太不注意,ijk用的有点混,导致...原创 2018-06-03 19:22:32 · 560 阅读 · 0 评论 -
【模板题】动态规划 石子合并、括号匹配、加分二叉树——区间dp问题及其整理
原题题目大意:输入一棵树的中序遍历,定义一棵子树的得分为其左子树的加分×右子树的加分+根的分数。求最大得分及先序遍历注意:1、初始化r[i][i]=i,便于输出2、初始化dp[i][i-1]=dp[i+1][i]=1。因为在区间中选取一点为root时会取到端点,即左(右)子树为空的情况,此时得分=左子树得分*1+根的分数,即给端点情况(实际这样的子树不存在)赋值为13、遍历顺序:区间长度->...原创 2018-06-03 21:30:04 · 312 阅读 · 0 评论 -
动态规划 仅思路
原题题目大意:一堆人分成两拨,体重差最小思路:在不超过1/2总体重的情况下求最大体重值,01背包问题原创 2018-06-03 21:46:28 · 641 阅读 · 1 评论 -
【模板题】动态规划 POJ 1768:最大子矩阵
点击打开链接很巧妙的一道题!尤其需要注意子函数中求max的部分!!#include<iostream>#include<string.h>using namespace std;int n;int maxsub(int * a){/*m只是代表到a[i]为止的最大序列和假如数组为 5,-1,1,2,1 则m为4而结果应为5!!*/ int i; int ...原创 2018-05-28 15:00:25 · 410 阅读 · 0 评论 -
【模板题】动态规划 NOI 1759:最长上升子序列
点击打开链接模板题,复杂度O(nlogn),用到的栈的思想。但是注意,最终栈中的数据是乱序的。。。lower_bound(s,s+top,a[i]) 返回一个非递减序列[s, s+top)中的第一个大于等于值a[i]的位置#include<iostream>#include<algorithm>using namespace std;int a[1001],s[100...原创 2018-05-28 19:43:57 · 1014 阅读 · 0 评论 -
【模板题】动态规划 NOI 1808:公共子序列
点击打开链接模板题,唯一一道没有参考网上思路自己会敲的题T T因为只有这个算法在《算法设计》里讲了。。。谢谢本校张老师T T 不过还是没有一遍过,有一个需要注意的细节。。。#include<iostream>#include<algorithm>#include<string>#include<string.h>using namespace...原创 2018-05-28 20:07:45 · 216 阅读 · 0 评论 -
【模板题】动态规划 NOI 3532:最大上升子序列和
点击打开链接模板题,使用的O(n^2)的最大上升子序列的方法,只将子序列长度改为子序列和#include<iostream>#include<algorithm>using namespace std;int a[1001],dp[1001];int main(){ int n,i,j,ans; cin>>n; for (i=0;i<n;i...原创 2018-05-28 21:04:26 · 721 阅读 · 0 评论 -
动态规划 NOI 7625:三角形最佳路径问题——树形递归
原题题目大意:求一条路径,从三角形的顶部到底部路径上的数字之和最大。 很简单,但是由于是动态规划的一种典型例题,还是mark一下#include <iostream>#include<string.h>#include<string>using namespace std;int dp[101][101],a[101][101];int n;int ...原创 2018-06-04 21:30:32 · 432 阅读 · 0 评论 -
【较难,技巧题】动态规划 [NOIP1999]拦截导弹 ——求最大下降子序列长和最小覆盖全部数据的序列数
点击打开链接(新发现的一个oj,样式很小清新呀)题目大意:n个导弹,(1)求最大非上升子序列长度(2)要拦截所有导弹最少要配备这种导弹拦截系统的套数思路1:每一次求最大非上升子序列,求一次删一次。直到数组全0。有点害怕超时,然而没有hhh注意:1、需要记录序列不能用O(nlogn)的方法2、lower_bound()函数的要求是查找数组是非递减的,找第一个>=x的位置;upper_bound...原创 2018-06-02 15:55:38 · 706 阅读 · 0 评论