![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
杭电OJ
摩霄志在潜修羽
骐骥一跃,不能十步。驽马十驾,功在不舍。
展开
-
杭电2068--RPG的错排
题目: 分析: 这是一道很规范的错排题,关于错排的理解(百度百科): 当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推. 第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法; 第二步,放编号为k的元素,这时有两种情况:⑴把它放到位置n,那...原创 2018-08-08 18:45:58 · 883 阅读 · 0 评论 -
杭电1003--Max Sum
题目描述: 解析: 这道题求的是连续子序列的和的最大值,联想到最长递增子序列,不妨用动态规划的想法去做。 我们假设原始序列的元素为a[n],dp[i]为以第i个元素为结尾的子序列的最大值,那么通过一趟遍历,依次比较以第i个元素为结尾的子序列的最大值即可。 举例说明,一个序列如下: 通过分析不难发现,以第i个元素为结尾的子序列的最大值存在两种情况: (1)既然是连续的子序列,那么...原创 2018-09-08 17:52:02 · 191 阅读 · 0 评论 -
杭电1087--Super Jumping
题目描述: 解析: 很水的一道题,就是把最长递增子序列的长度变为了最长递增子序列的和,让dp[i]来表示以a[i]结尾的最长子序列的和就好了。 递推公式: dp[i]=max{dp[i],dp[j]+a[i]} 不过需要注意的一点是,此处外层循环的下标就要从1而不是2开始了,因为也需要计算dp[1]的值。 代码://杭电1087#include<stdio.h>...原创 2018-09-08 18:44:03 · 303 阅读 · 0 评论 -
杭电2159--FATE
题目描述: 解析: 这道题是很明显的完全背包问题,所不同的是在背包容量限制的基础上限定了最多可以拿取的物品数量。最开始做的时候不知道新增的限制条件怎么使用,参考了网上的代码,写一下思路: 既然新增了一条限制,也就是要保证拿取的数量要小于限制的数量,那么可以对原有的数组新增加一个维度:状态设计:dp[z][j]表示杀z个怪且花费不超过j的情况下得到的最大经验值 状态转移方程:dp[z...原创 2018-09-05 21:31:25 · 225 阅读 · 0 评论 -
杭电2844--Coins
题目描述: 解析: 知道这是完全背包问题,但是初做这道题时我还是不知道用什么作为背包容量,而通过分析这道题发现,题目所求是价值不超过m的方案的个数。对于(1–m)内的任意一个价值,如果最佳方案dp[i]达到了这个值,那么就可以说存在这种方案。因此建立如下转移方程: dp[i][j]=max{dp[i-1][j],dp[i-1][j-v[i]]+v[i]} 其中dp[i][j]表示的是装...原创 2018-09-07 14:27:06 · 244 阅读 · 0 评论 -
杭电2571--命运
题目描述:解析:这是典型的动态规划题,一个点可以由三个不同的点推导而来,具体见图:(据说可以用记忆化搜索之类,可是我还没学…)状态转移方程很简单就可以列出来,我把题目给的样例带进去发现也没啥问题,结果WA了…对比网上代码,我发现了问题症结所在:循环下标从1开始,初始的dp[0][n]和dp[m][0]我全都给赋了初始值0,但是第一排就很可能出现负值,这就导致了对下标为0的dp进行使用...原创 2018-09-25 18:38:28 · 149 阅读 · 0 评论 -
hdu2845--beans
Problem DescriptionBean-eating is an interesting game, everyone owns an MN matrix, which is filled with different qualities beans. Meantime, there is only one bean in any 11 grid. Now you want to eat...原创 2018-10-02 15:46:07 · 194 阅读 · 0 评论 -
杭电1159--Common Subsequence
题目描述:解析:经典dp问题,求最长递增子序列。用dp[i][j]表示以str1第i个元素、str2第j个元素结尾的最长递增子序列的长度,对于输入的两个字符串,依次遍历。分两种情况讨论:(1)如果str1的第i个元素和str2的第j个元素相等,那么最长递增子序列的长度就等于str[i-1]和str[j-1]结尾的长度。(2)如果不等,那么最长递增子序列又分两种情况:a.str[i-1]及...原创 2018-10-03 16:40:10 · 214 阅读 · 0 评论 -
HDU 动态规划(46道)
动态规划需要疯狂刷题才能理解深意,这里贴上找到的HDU动归46题,希望自己能全部刷完!原博地址:http://www.cppblog.com/doer-xee/archive/2010/01/28/102629.html#Post动归46题:Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955背包;第一次做的时候把概率当做背包(放...转载 2018-09-30 19:36:22 · 282 阅读 · 0 评论 -
杭电2059--龟兔赛跑
题目描述: 解析: 使用动态规划思想建立模型,开始以为自己对动态规划已经很熟练了,做了这道题才发现,呵呵~还是得练! 废话不多说,这道题的思想如下: 想要求乌龟与兔子谁先到达终点,其实就是拿乌龟到达终点的最快速度与兔子的相比,因此我们设乌龟到达某一点最快的时间为dp[n],对于每过一个点,存在充电与不充电两种情况,因此我最初的想法是比较充电与不充电这两种情况的最短时间,作为dp[i]。...原创 2018-09-11 16:13:50 · 358 阅读 · 0 评论 -
杭电2512--一卡通大冒险
题目描述: 题目解析: 这道题可以类比于将n个不同的球,放入m个无区别的盒子,不允许盒子为空。对于n个球(n&gt;1)来说,将n放入(n-1)个球中可能面对的情况有:(1)如果n-1个元素构成了m-1个集合,那么第n个元素单独构成一个集合。方案数为a[n-1][m-1(2)如果n-1个元素已经构成了m个集合,将第n个元素插入到任意一个集合。方案数为 m*a[n-1][...原创 2018-08-09 18:31:36 · 359 阅读 · 1 评论 -
杭电1002--A+B problem II
题目描述: 解析: 经典大数问题,因为相加的数可能有上万位数,显然不能用常规的long long 类型,为了方便输入并且统计位数,用两个字符串数组来记录输入的数。 模拟加法,因为加法的原则是个位对齐相加,因此我们可以将字符串数组逆序存放在整形数组中,记录两个数中位数较长的数有多少位,用来确定后续加和遍历的次数,再用一个数组来保存各位数字的加和。例如有两个数字a和b位置相对,那么这个位置得...原创 2018-09-04 18:56:44 · 2600 阅读 · 0 评论 -
杭电2190--重建希望小学
题目描述:宽为3长为n的教室,用1*1和 2*2的砖铺满,问有多少种铺法。 递推公式推导: 1.新加入的第n列,可以全铺满1*1的砖,这样方法数就是a[n-1] 2.新加入的第n列可以和第(n-1)列用2*2的砖铺,那么对于这个3*2的区域,可以铺在上部分和下部分。左边(n-2)的铺法有a[n-2]种,因此乘以2. 综上,a[n]=a[n-1]+2*a[n-2]代码:#incl...原创 2018-08-09 15:04:15 · 242 阅读 · 0 评论 -
杭电2899--strange fuction
题目描述: 这题用到了二分法,由于去除-y*x之后,在[0,100]区间内F(x)导数恒大于0,因此加上-x*y后,F(x)会有两种情况: (1)y>0,此时函数可能单增也可能先增后减。 (2)y<=0,此时函数一定单增。 我们只要求出F(x)的导数为0点即可。此函数的极小值点两侧一定先减后增,或者直接减小到极小值点。可以通过二分法不断缩小区间最终确定极小值。 代码如下:...原创 2018-08-05 20:41:07 · 295 阅读 · 0 评论 -
杭电1171--Big Event in HDU
水题,下标越界害我RE无数次,下次再也不为了节省减少数组空间了。。。 这题贵在锻炼灵活思路,因为A>=B,实际上就是求在(总价值/2)的情况下最大的价值(B的),再用总价值减去这个就是A的了。#include<stdio.h>#include<string.h>int MAX(int a,int b){ return a>b?a:b;}...原创 2018-08-14 10:18:29 · 138 阅读 · 0 评论 -
对错排递推式的理解
错排问题与递推式的推导:错排递推式:D[n]=(n-1)(D[n-1]+D[n-2]) 说明: 有一个形象的例子可以说明何为错排:十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法? 将问题推广便得到错排问题,也就是求使N个数全不在自己位置上的方法数。令Dn代表N种不同物品错排的方法数,那么这个错排公式该如何推导呢? 我们令1—–N这N个数最初顺序摆放在他们原有...原创 2018-08-11 21:03:30 · 559 阅读 · 0 评论 -
杭电1995--汉诺塔V
题目描述: 解析: 这道题的题意:N个盘子从A挪到C,求第K个盘子挪动的次数。 分析可知,把n个盘子从A挪到C,和把n个盘子从A挪到B的次数是相同的(因为只要满足条件就可以在三根柱子上随意挪动)。因为不管N是多少,最后一个盘子都只挪动一次,因此我们可以从下往上分析。我们假设只有(n-1)个盘子,并让这几个盘子都挪到中间(这与挪到C的次数相同),那么对于这(n-1)个盘子来说,第(n-1)...原创 2018-08-13 14:52:28 · 208 阅读 · 0 评论 -
杭电2955--Robberies
此题大坑 我以概率乘以100作背包容量,以所得价值为价值,很快写出了代码,然而WA了! 错误代码:#include<stdio.h>#include<string.h>int MAX(int a,int b){ return a>b?a:b;}int main(){ int n,m,i,t,j,max2; int val...原创 2018-08-13 20:28:20 · 203 阅读 · 0 评论 -
杭电1203-- I NEED A OFFER!
题目描述: 思路: 这道题与2955思想相同,只不过更直观:求不被录取的最小概率。 代码:#include<stdio.h>#include<string.h>#define MAXN 10005float MIN(float a,float b){ return a<b?a:b;}int main(){ int i,j...原创 2018-08-13 22:04:01 · 326 阅读 · 0 评论 -
杭电2084--数塔问题
十多天没被acm虐了,有点手痒,把之前做过的动规数塔题重新看了一遍,写一下心得。 题目描述: 解析: 一般的想法:首先,我们可以试一下使用传统的遍历。既然求经过结点的数字之和的MAX,不妨将所有情况列出,最后比较各数字和的大小即可,这样的方法显然超时,因为在计算不同的分支时,存在大量不必要的重复计算,例如在进行最后一层的计算时,有两种路径: (1)9+12+10+2+19 ...原创 2018-09-04 16:19:40 · 223 阅读 · 0 评论 -
杭电1257--最少拦截系统
题目描述:解析:这道题的题意容易让人产生误解,正确的解析–举个例子:输入:67 3 5 1 2 1那么就需要两套反导系统,分别是:7 3 2 1 和 5 1这道题的本质其实可以理解为最长上升子序列问题,引用一段话说明转化的思想:这道题让求最少的拦截装置,由题意知,当导弹高度递减时,可以用一套装置拦截。我们可以换种思路想一下,当什么情况下需要增加拦截装置,当后面一个数比前面某...原创 2018-10-09 19:08:43 · 262 阅读 · 0 评论