![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
mtcyjj
这个作者很懒,什么都没留下…
展开
-
书的复制2021-06-22
洛谷绿题 题目传送门 题目背景 大多数人的错误原因:尽可能让前面的人少抄写,如果前几个人可以不写则不写,对应的人输出 0 0 。 不过,已经修改数据,保证每个人都有活可干。 题目描述 现在要把 m 本有顺序的书分给 k 个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本书给同一个人抄写。 现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数最多的人用去的时间。 输入格式 第一行两个整数 m,k。 第二行 m 个原创 2021-06-22 18:53:01 · 156 阅读 · 0 评论 -
背包比赛进阶2021-06-10
T1 只需要注意前缀输出ok了 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int INF=0x3f3f3f3f; const int MAX_N=5e2+5; const int MAX_K=5e2+5; const int MAX_V=5e2+5; int w[MAX_N][MAX_N]; int dp[MAX_N][MAX_N]; int r[MAX_N][MAX_N]; int c原创 2021-06-10 19:45:02 · 121 阅读 · 0 评论 -
背包比赛总结2021-05-29
nt错误大全 T1质数和分解 题目传送门 题目描述 任何大于 1的自然数 n 都可以写成若干个大于等于 2 且小于等于 n的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式。 这里所谓两个本质相同的表达式是指可以通过交换其中一个表达式中参加和运算的各个数的位置而直接得到另一个表达式。 试编程求解自然数 n 可以写成多少种本质不同的质数和表达式。 输入格式:文件中的每一行存放一个自然数 n(2≤n≤200) 输出格式:依次输出每一个自然数 n 的本质不同的质数和表达式的数目原创 2021-05-29 17:45:42 · 163 阅读 · 1 评论 -
砝码称重2021-05-27
砝码称重——很有意思的dp 题目传送门 题目描述 设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重≤1000 ), 输入方式:a1,a2,a3,a4,a5,a6 (表示1g砝码有a1个,2g砝码有a2个,…,20g砝码a6个) 输出方式:Total=N (N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况) 思路: 1.把题目转换成01背包,把每次进来的物品个数一个个的拆分为单个物品存放在c数组内 2.将c数组进行01背包求方案数的方法求解,求解方法如下: 设f[i]原创 2021-05-27 20:54:41 · 1405 阅读 · 1 评论 -
背包六讲
一.01背包 题目:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 解析:每种物品仅有一件,可以选择放或不放。 f[i][v]表示前i件物品放入容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。 空间优化后,要求在每次主循环中我们以v=V…0的顺序推f[v],这样才能保证推f[v]时f[v-c[i]]保存的是状态原创 2021-05-18 20:39:06 · 163 阅读 · 0 评论 -
计算字符串距离2021-4-27
opj2988:计算字符串距离 题目传送门 2988:计算字符串距离 描述 对于两个不同的字符串,我们有一套操作方法来把他们变得相同,具体方法为: 修改一个字符(如把“a”替换为“b”) 删除一个字符(如把“traveling”变为“travelng”) 比如对于“abcdefg”和“abcdef”两个字符串来说, 我们认为可以通过增加/减少一个“g”的方式来达到目的。 无论增加还是减少“g”,我们都仅仅需要一次操作。 我们把这个操作所需要的次数定义为两个字符串的距离。 给定任意两个字符原创 2021-04-27 20:59:49 · 135 阅读 · 0 评论 -
登山2021-4-27
opj1996:登山 题目传送门 描述 五一到了,PKU-ACM队组织大家去登山观光, 队员们发现山上一个有N个景点, 并且决定按照顺序来浏览这些景点, 即每次所浏览景点的编号都要大于前一个浏览景点的编号。 同时队员们还有另一个登山习惯, 就是不连续浏览海拔相同的两个景点,并且一旦开始下山, 就不再向上走了。队员们希望在满足上面条件的同时, 尽可能多的浏览景点, 你能帮他们找出最多可能浏览的景点数么? 输入 Line 1: N (2 <= N <= 1000) 景点数 Line 2: N个整数原创 2021-04-27 19:57:01 · 92 阅读 · 0 评论 -
友好城市2021-04-22
友好城市 思路:由图一图二可知,要求连线没有交点,要求两条结点序列都要单调递增 由此思路就出来了!先把一个岸的结点排序,再在另一个已经更新的序列中求出最长不下降子序列 AC code #include<bits/stdc++.h> #define INF 100000 const int maxn=5005; using namespace std; struct river { int x,y; }a[maxn]; int n,ans=-INF,f[maxn]; bool cmp原创 2021-04-22 20:07:17 · 81 阅读 · 0 评论 -
专题:在dp过程中记录路径
** T1 最短路径 思路:用邻接矩阵建图,很简单的用floyd求最短路 而记录路径时则要用二维,每次更新路径要在找到更优解的时候更新,pre[i][j]=k表示从i到j要经历的中转点为k,最后递归print AC code #include <bits/stdc++.h> #define INF 1000000 const int maxn = 105; using namespace std; int a[maxn][maxn]; int n; int dp[maxn][maxn]; in原创 2021-04-22 19:38:42 · 502 阅读 · 0 评论 -
关于导弹拦截的补充思路
题目链接 题意总结: 给出一个长度不超过100000的数列,其中的数每个是不大于50000的正整数,求这个数列的最长不降子序列(问一)以及将这个数列划分为n个不降子序列时,n的最小值(问二)。 思路: 1、对于问一直接用O(n*logn)的方法求最长不升子序列即可。 求不升子序列的方法:链接 2、对于问二求整个数列的最长上升子序列即可。证明如下: (1)假设打导弹的方法是这样的:取任意一个导弹,从这个导弹开始将能打的导弹全部打完。而这些导弹全部记为为同一组,再在没打下来的导弹中任选一个重复上述步骤,直到打完原创 2021-04-17 17:50:39 · 142 阅读 · 1 评论