DP
算法
黑谷小健
一定要开心鸭
展开
-
区间DP---P3205 [HNOI2010]合唱队
区间dp算法好题原创 2022-09-28 21:12:06 · 221 阅读 · 1 评论 -
LL与CC
newcoder好题---LL与CC链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网题目描述小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放时间和固定的伤害值为:1.乌鸦坐飞机 释放时间:x 固定伤害值:a2.蜘蛛吃耳屎 释放时间:y 固定伤害值:b3.饿狼前进 释放时间:z 固定伤害值:c他还有一个大招,其释放的时间是一个区间【L,R】,可以在区间内任意时间点释放出技能,其如果在L+i时刻释放技能,其能够打出的伤害值为:te..原创 2022-05-16 11:25:58 · 516 阅读 · 0 评论 -
P3842 [TJOI2007]线段(经典DP)
题目:题意倒是很好懂,就是你必须经过每一行的一些线段,求从起点到终点并且经过题目要求的线段的最短路思路:比较典型的DP,首先先想,每一层的最优肯定是由上一层限制的左端点或者右端点下来得到的,那么就可以有状态转移方程了f[i][0]表示走完第i行且停在第i行的左端点最少用的步数f[i][1]同理,停在右端点的最少步数。那么转移就很简单了,走完当前行且停到左端点,那么一定是从右端点过来的,那么从上一行左端点转移的话就是f[i][0]=abs(上一行左端点的坐标-本行右端点的坐标+本行线段长度)原创 2022-02-16 16:15:42 · 563 阅读 · 0 评论 -
洛谷P1077 [NOIP2012 普及组] 摆花 (DP)
题意:小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 mm 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n种花,从1到n标号。为了在门口展出更多种花,规定第 ii 种花不能超过ai盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列.试编程计算,一共有多少种不同的摆花方案。思路:m 和 n 的范围都很小,不用对数字类型做特殊处理。至于如何求解,起码你得先搞懂题意,这个题目有一个对应的模板题目:“求和问题”。把题目翻译过来就是有 n 个数字,每个数字有自己的取值原创 2022-02-15 21:42:35 · 781 阅读 · 0 评论 -
P1203 [USACO1.1] 坏掉的项链 Broken Necklace(模拟)
题意:图片 A 中的项链可以用下面的字符串表示:brbrrrbbbrrrrrbrrbbrbbbbrrrrb假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在另一端做同样的事(颜色可能与在这之前收集的不同)。 确定应该在哪里打破项链来收集到最大数目的珠子。思路:看是dp,但是实际上可以当做模拟题做,暴力的枚举断点,然后模拟往左找,往右找,输出最大的值,但是由于有个万能的w,处理的十分麻烦,这里有给很清晰的代码,贴贴#include<bi原创 2022-02-15 20:36:17 · 296 阅读 · 0 评论 -
洛谷 P1832 A+B Problem(再升级)(完全背包)
题意:给定一个正整数n,求将其分解成若干个素数之和的方案总数。思路:知道是dp,但是想了一会都没去想到完全背包,其实看到拆分就代表素数应该是能无限取的,那么在套用完全背包其实是非常简单的但是写的时候有点问题,因为状态转移发程和普通的完全背包有点不同。它的转移方程实际是:dp[i]=dp[i]+dp[i-比他小的素数]①i是代表从元素i到0有多少种方案②i较小时DP[0]=1会不断给DP[i]++,所以DP[0]表示有多少种方案可以由i减到0,所以要赋个初值。#include<bits/原创 2022-02-15 15:44:54 · 620 阅读 · 0 评论 -
洛谷P1802 5 倍经验日(01背包裸题)
题面如下:机票抽象出来就是个01背包裸题,选择当前需要的花费就是药水,然后对应增加价值,我提前预处理失败的可获得经验直接加,然后对应的赢获得的价值就是b-a。#include<bits/stdc++.h>using namespace std;const int maxn=1e4;long long v[maxn],w[maxn],dp[maxn];int main(){ long long ans=0; int n,x,i,j,t; cin>原创 2022-02-15 15:09:07 · 266 阅读 · 0 评论 -
洛谷 P1359 租用游艇(简单dp/Dijkstra)
给出一张有向图和从第i条边到n的条边的所有花费,求最少的租金思路:dp想不明白,虽然我是在训练dp…图论的话,单源最短路可以用迪杰斯特拉叭也不需要堆优化,朴素的迪杰斯特拉也能过#include<bits/stdc++.h>using namespace std;int a[202][202];int g[202];int n;bool st[202];void dijkstra(){ g[1]=0; for(int i=1;i<=n;i++)原创 2022-02-15 14:53:33 · 171 阅读 · 0 评论 -
m个苹果放在n个盘子里面有多少种放法?(动态规划)
题意:把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? 5,1,1和1,5,1 是同一种分法。思路:设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论,如果n>m,必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响;即 if(n>m) f(m,n) = f(m,m) 当n<=m时,不同的放法可以分成两类:即有至少一个盘子空着或者所有盘子都有苹果,前一种情况相当于f(m,n) = f(m,n-1); 后一种情况可以从每个原创 2021-04-03 16:17:25 · 3068 阅读 · 0 评论 -
最长公共子序列(动态规划)
会这个算法发现只需要解决三个问题:①:什么是子序列?很多人看不懂的原因都是弄不清楚子序列这个概念,不会说是我自己的 ,其实简单来说就像一个集合里的元素拿出来排,我是这么理解的,但是需要按照顺序。②得会动态规划?其实俺觉得可以形象的记忆,只需要一张图就可以了,目标就是想办法把图填满,每一次的比较也很简单,如果相同的话就把轴上最近的值加1,否则取上一个字符a和b串构成最大的值这里借用一下=。=③要会阿巴阿巴贴贴题Common Subsequence#include<bits/std原创 2021-04-02 20:27:55 · 121 阅读 · 0 评论 -
钱币兑换问题(dp+数学)
题意:在一个国家仅有1分,2分,5分硬币,将n(n>=5)分钱兑换成硬币有很多种兑法。求有多少种兑换方式。第一种解法:通过枚举3的种类数,当你已知3的个数就可以求出2的种类,以此类推,3的个数确定,2的个数也可以确定,剩下的就是1,假设3的个数为x(0<=x<=n/3),那么2的个数就是(n-3*i)/2,再然后1的个数就确定了。#include<bits/stdc++.h>using namespace std;int main(){ int n; whil原创 2021-04-01 20:18:29 · 2803 阅读 · 0 评论 -
受过训练的小蜜蜂嗡嗡嗡(简单dp,斐波那契)
HDU2044题意:如图思路:从终点判,蜜蜂每次只能从前1个蜂房或者前2个蜂房过来所以:dp[i]=dp[i-1]+dp[i-2];再数出终点和起点相差的格子数为b-a+1,记得开longlong。#include<bits/stdc++.h>#define int long long using namespace std;signed main(){ int t,dp[50],i,n,a,b; dp[1]=0; dp[2]=1; dp[3]=2; cin>&g原创 2021-04-01 09:28:12 · 157 阅读 · 0 评论