
dp
程序员bigsai
坚持分享学习,写了一本原创数据结构与算法pdf分享给大家。
展开
-
杭电oj1003java实现
问题描述 给定序列a [1],a [2],a [3] … a [n],您的工作是计算子序列的最大和。 例如,给定(6,-1,5,4,-7),此序列中的最大和为6 (-1) 5 4 = 14。 输入 输入的第一行包含一个整数T(1 ...原创 2018-03-20 16:11:40 · 3476 阅读 · 2 评论 -
杭电oj1257最少拦截系统—贪心/dp最大递增子序列
附上题目链接:杭电oj1257 这个题目有动态规划和贪心两种解决方式。 贪心法1: 对于导弹我们知道只可以从大到小的反导,一个系统必须从大到小排列。那么我们就可以选择从最高的那个导弹入手,往右找仅次于最高的那个导弹,标记(可使用boolean),一直找到最后一个导弹形成系统1。在重复找未被标记的最大往右找,形成系统二,一直到全被标记为止。代码如下: import java.util.ArrayLi...原创 2018-03-04 22:19:43 · 2830 阅读 · 0 评论 -
LCS最长公共子序列
例如 b c d d e和 a c e e d e的公共子串为c d e。 如果使用暴力,复杂度太高会直接超时。就需要使用动态规划 dp[i][j]表示a串第i个结尾,b串第j个结尾的最长公共子串的数量。 首先分析i,j的情况 如果a[i]==b[j],因为两个元素都在最末尾的位置。所以一定可以匹配成功。换句话说,这个位置的邻居不可能大于他(最多相等).所以这个时候就是...原创 2018-09-04 19:59:52 · 2676 阅读 · 0 评论 -
PAT有几个pat
题目描述 字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T);第二个PAT是第3位(P),第4位(A),第6位(T)。 现给定字符串,问一共可以形成多少个PAT? 输入描述: 输入只有一行,包含一个字符串,长度不超过105,只包含P、A、T三种字母。 输出描述: 在一行中输出给定字符串中包含多少个PAT。由于结果可能比较大,只输出对...原创 2018-06-28 15:46:56 · 3127 阅读 · 3 评论 -
杭电1978java实现
杭电1978题目链接 dp思想,每个点往右往下遍历,这个点能到达的位置,(不超界),那个点的值加一。 刚开始使用int,结果000然后超值,以为int不够,后来吧int换成long还是超值,后来才意识到错误的根源是中间每次出现的数值都要000一次因为数值大到超乎想象,附上代码: import java.util.Scanner; public class 杭电1978 { p...原创 2018-03-21 21:43:51 · 2387 阅读 · 0 评论 -
杭电1421java实现
Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和...原创 2018-03-21 21:32:07 · 2441 阅读 · 0 评论 -
杭电1284钱币兑换问题—背包dp/母函数(java)
Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。 Input 每行只有一个正整数N,N小于32768。 Output 对应每个输入,输出兑换方法数。 Sample Input 2934 12553 Sample Output 718831 13137761 母函数暂时不会,只能...原创 2018-03-21 21:18:02 · 2559 阅读 · 0 评论 -
杭电1260java实现
题目链接 这题的核心状态转移方程是:dp[j]=min(dp[j-1] dan[j],dp[j-2] shuang[j-1]);dan[i]表示第i个人的单票,shuang[i]代表i-1和i两个人的钱,到第i个人就是要判断他是单人 前i-1人最少合最少还是他和前一个人双人票 前i-2个人最少合最少。 附上代码如下: import java.util.Scanner; public cl...原创 2018-03-20 21:43:00 · 2355 阅读 · 0 评论 -
杭电1203java实现
I need a offer题目链接 学习了其他人的才会的用Java复述一遍 首先,对于概率问题,如果直接从正面考虑会比较麻烦,不知直接从反面考虑不被offer 的概率。这是一道dp题,dp过了没啥问题,问题是贪心的代码也过了。。。。。。。尴尬并且测试数据有的dp和贪心结果不同,discuss里有。 dp :01背包问题,核心就是每当多一所学校时,看钱够不够,如果够,就比较采纳和不采纳这所...原创 2018-03-20 21:00:59 · 2584 阅读 · 0 评论 -
杭电oj1176,2084java实现
2084题目链接 1176题目链接 数塔问题,刚开始知道是动态规划确发现怎么想都想不出来,参考学习了其他人写的才知道这是一个数塔问题,建议写这题之前把2084做了。 2084显然是dp,但是数塔和普通的不同就是数塔从后往前递减。附上代码如下: import java.util.Scanner; /* * 数塔 */ public class 杭电2084 { publi...原创 2018-03-20 20:17:55 · 2625 阅读 · 0 评论 -
杭电oj1087最长递增子序列java实现
1087链接 要求最长递增子序列和。代码如下: import java.util.Scanner; public class 杭电1087 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()) { int n=sc.next...原创 2018-03-20 19:57:26 · 2402 阅读 · 0 评论 -
杭电OJ1069java实现
杭电1069题目链接 思路:建立类包含高,长,宽。(长的为长,在构造函数中默认比较),面积(也可以不需要直接长长,宽宽比较),按照面积从小到大排序(如果没有面积按照长)。dp[i]表示以第i个为截至的最大高度dp[i]=dp[j] kuai[i].heght.(j表示小于i的最大高度那个),没输入三个数默认增加三个数据。类似最长子序列的dp; 代码如下: import java.util.S...原创 2018-03-20 19:52:17 · 2431 阅读 · 1 评论 -
杭电1024 Max Sum Plus Plus状压dp(java)
问题描述 现在我认为你已经在Ignatius.L的“最大总和”问题中得到了AC。为了成为一名勇敢的ACMer,我们总是向更难挑战的问题挑战自我。现在你面临着一个更困难的问题。 给定连续的数字序列S1,S2,S3,S4 … Sx,… Sn(1≤x≤n≤1,000,000,-32768≤Sx≤32767)。我们定义了函数和(i,j)= Si … Sj(1≤i≤j≤n)。 现在给定一个整数m...原创 2018-03-20 17:25:09 · 2760 阅读 · 0 评论 -
蓝桥杯节点选择(java)第一道树形dp分析
蓝桥杯 节点选择 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少? 输入格式 第一行包含一个整数 n 。 接下来的一行包含 n 个正整数,第 i 个正整数代表点 i 的权值。 接下来一共 n-1 行,每行描述树上的一条边。 输出格式 输出一个整数,代表选出的点的权值和的最大值...原创 2018-11-01 21:52:25 · 4188 阅读 · 0 评论