![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
自闭自闭自闭了
这个作者很懒,什么都没留下…
展开
-
P5020 [NOIP2018 提高组] 货币系统
【传送门】[NOIP2018 提高组] 货币系统 - 洛谷(n,a)系统和(m,b)系统等价,即(n,a)系统中可以组成的面值和(m,b)一模一样,也就是说当a[]数组中所有的值,都可以用b[]数组中的面值表示出来。怎么得到b[]数组呢?a[]中最小值x肯定与b[]中最小值相同,所以x加入b[]中,然后看a[]中次小y,能不能用x组成,若不能,加入y,差不多这样循环下去。看下数据规模,就是背包dp具体解释看代码:#include<bits/stdc++.h>u..原创 2022-02-13 21:59:35 · 389 阅读 · 0 评论 -
P1020 [NOIP1999 普及组] 导弹拦截
(可能我蒟蒻,所以觉得不简单)首先我们可以把它抽象成两个问题 :一个求最长不上升子序列一个求最长上升子序列会了最长上升子序列问题一自然会了取mx为a[]数组的最大值 ,想象有标号依次为1--mx的桶,定义t[j](1<=j<=mx)为以数j结尾的最长递增序列长度每当查询a[i]前面有多少数时,遍历前面的1~a[i],取x = max(t[j])+1(1<=j<a[i]),x即为以a[i]结尾的最长子序列长度同时遍历a[i]+1~maxi的桶,若该桶的值比原创 2022-02-12 23:11:49 · 198 阅读 · 0 评论 -
P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles
很简单的一道dp首先看一下数据范围,1e3可以开个二维的然后思考状态转移方程,设位置i,j,一般情况下,[i][j]由位置[i-1][j-1]和[i-1][j]转移过来的,然后在考虑边缘位置,就可以了#include<bits/stdc++.h>using namespace std;const int maxn = 1005;int a[maxn][maxn], dp[maxn][maxn];int main(){ int n; cin >>原创 2022-02-12 15:48:53 · 170 阅读 · 0 评论