随笔分类 -  DP系列

摘要:地址:https://ac.nowcoder.com/acm/contest/7831/B 题意: 从数组中选出最长等差数列。 解析: 定义dp[i][j],表示此等差数列的最后两项。那么ai,aj的等差数列长度的确定,来自于之前的a[c](往左第一个差值符合的数),c~i+j 所以转移方程就为 : 阅读全文
posted @ 2020-10-06 21:44 liyexin 阅读(203) 评论(0) 推荐(1)
摘要:A:http://codeforces.com/contest/1420/problem/A 题意: 最多交换n*(n-1)/2-1次,是否能把序列变成非递减序列 解析: 冒泡排序最差的情况是n*(n-1)/2,最差情况就是全递减。所以判断序列是否为单调递减即可。 #include <bits/st 阅读全文
posted @ 2020-09-25 22:14 liyexin 阅读(193) 评论(0) 推荐(0)
摘要:A:http://codeforces.com/contest/1398/problem/A 题意: 在非递减序列中找非法三角形 解析: 刚开始搞了个结构体排序,然后才发现给出的就是非递减。。。 看1,2,n,如果它三能组成三角形,一定不存在非法。 #include<bits/stdc++.h> u 阅读全文
posted @ 2020-08-15 17:37 liyexin 阅读(149) 评论(0) 推荐(0)
摘要:A:http://codeforces.com/contest/1393/problem/A 解析: 猜的,没看懂题意。 #include <bits/stdc++.h> #include<stdlib.h> using namespace std; typedef long long ll; co 阅读全文
posted @ 2020-08-09 00:18 liyexin 阅读(193) 评论(0) 推荐(0)
摘要:地址:https://ac.nowcoder.com/acm/contest/5667/F 题意: n*m的矩阵,mp[i][j]=lcm(i,j) 求每个k*k矩阵的最大值之和 解析一,DP做法: 针对k>1的情况,我们把每个2*2矩阵的最大值放在右下角。 k*k的矩阵,它是由若干个2*2的矩阵组 阅读全文
posted @ 2020-07-16 11:56 liyexin 阅读(198) 评论(0) 推荐(0)
摘要:考试周,但还是打了一场,一个周不打了,手生了不少....... A:http://codeforces.com/contest/1373/problem/A 题意: 第一个商店:1个卖a元 第二个商店:打包卖,b个卖c元。比如买b+1个,那也得买双份,2b个。 求买多少(任意),第一个商店更便宜,第 阅读全文
posted @ 2020-06-26 18:52 liyexin 阅读(160) 评论(0) 推荐(0)
摘要:A: http://codeforces.com/contest/1350/problem/A 题意:f(n)+n,求第k次的结果。f(n)为n的最小公因数。 解析:模拟一下,就可以看出,这是一个d=2的等差数列,第一项是f(n)+n,求第k项。所以先把f(n)求出来。 #include<iostr 阅读全文
posted @ 2020-05-13 20:18 liyexin 阅读(171) 评论(0) 推荐(0)
摘要:地址:https://ac.nowcoder.com/acm/contest/5338/B 解析:dfs超时了....其实对于每个可到达点来讲,它的来源是左和下,所以有:dp[i][j]=(dp[i+1][j]+dp[i][j-1]) 题目给出了快速读入模板: template<class T>in 阅读全文
posted @ 2020-05-02 16:56 liyexin 阅读(231) 评论(0) 推荐(0)
摘要:地址:https://www.luogu.com.cn/problem/CF33C 题意: 给你一个序列,你可以选择它的前缀和后缀中的每个数字都乘以-1。前缀和后缀可以交叉也可以为空。 问能得到的最大序列和是多少。 解析:假设这个序列分成了三部分:A(前缀)+B(重合)+C(后缀) S=A+B+C。 阅读全文
posted @ 2020-04-16 23:06 liyexin 阅读(144) 评论(0) 推荐(0)
摘要:地址:https://www.acwing.com/problem/content/284/ 题意:给一堆石子,相邻的合并,问最后得到的最小花费,花费具体算法在题里。 解析: 对于此题,根据常识,对于最终状态,是由两团合并的。所以定义dp[i][j]表示区间i-j合并的最小值。 二堆合并:dp[1] 阅读全文
posted @ 2020-04-11 23:44 liyexin 阅读(185) 评论(0) 推荐(0)
摘要:地址:https://cometoj.com/contest/76/problem/A?problem_id=4237 解析:这个题用DP解比较简单,其他的解法我并没有看懂。所谓波浪,单独一个数字不能算,两个数字一定算上。我们的二维dp,j=0表示下降或相等,j =1 表示上升。i 从0到n 转移方 阅读全文
posted @ 2020-04-11 23:41 liyexin 阅读(168) 评论(0) 推荐(0)
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1087 题意:这个样例很误导人啊,这个题意呢,就是从起点跳到终点,保持递增跳而且得分最大。注意,起点和终点是不计分的; 解析:模板改一下就好了,之前求的是序列长度。这里求和,那么只要把dp初始化a[ ],依然 阅读全文
posted @ 2020-04-11 23:38 liyexin 阅读(203) 评论(0) 推荐(0)
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1257 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const 阅读全文
posted @ 2020-04-11 23:36 liyexin 阅读(116) 评论(0) 推荐(0)
摘要:地址:http://codeforces.com/problemset/problem/455/A Alex doesn't like boredom. That's why whenever he gets bored, he comes up with games. One long winte 阅读全文
posted @ 2020-04-11 23:35 liyexin 阅读(178) 评论(0) 推荐(0)
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1176 中文题意不多解释了。 建一个二维dp数组,dp[ i ][ j ]表示第 i 秒落在 j 处一个馅饼。我们需要倒着DP,为什么呢,从 0秒,x=5处出发,假如沿数组正着往下走,终点到哪里我们是不知道的 阅读全文
posted @ 2020-04-11 23:34 liyexin 阅读(133) 评论(0) 推荐(0)
摘要:HDU1176 中文题意不多解释了。 建一个二维dp数组,dp[ i ][ j ]表示第 i 秒落在 j 处一个馅饼。我们需要倒着DP,为什么呢,从 0秒,x=5处出发,假如沿数组正着往下走,终点到哪里我们是不知道的,沿这个路线能最大值,下一秒就未必是最大值。但是我们知道起点,所以我们从终点开始走, 阅读全文
posted @ 2020-01-28 16:12 liyexin 阅读(349) 评论(0) 推荐(0)
摘要:01 背包: 01背包:在M件物品中取出若干件物品放到背包中,每件物品对应的体积v1,v2,v3,....对应的价值为w1,w2,w3,,,,,每件物品最多拿一件。 和很多DP题一样,对于每一个物品,都只有拿或者不拿这两种状态,不拿或者拿不动,dp[i][j]=dp[i-1][j],容量不变,而如果 阅读全文
posted @ 2020-01-09 17:03 liyexin 阅读(368) 评论(0) 推荐(0)
摘要:HDU1003 Problem Description Given 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,- 阅读全文
posted @ 2019-10-17 17:09 liyexin 阅读(451) 评论(0) 推荐(0)