
POJ
文章平均质量分 52
RCyyds
这个作者很懒,什么都没留下…
展开
-
POJ 2488 A Knight‘s Journey(dfs)
传送门:A Knight’s Journey题意:给你一个p*q的棋盘(大小不超过8✖8,1<=p✖q<=26),要求棋盘的所有位置都要经过,且只经过一次,问字典序最小的一条路径,如果没有就输出impossible。思路:这道题有一点我比较困惑,就是起始位置的选择,按照我的理解,起始位置也要枚举,但看其他代码没有枚举,起始位置就用(1,A)也能过,就很迷。。。于是我也从(1,A)开始枚举。这道题的思路就是我们把马能走的用dx,dy记录下来,并且是按照字典序的顺序记录下来,其他的就按照常原创 2022-05-18 14:38:09 · 187 阅读 · 0 评论 -
POJ 1159 Palindrome(LCS变形)
传送门:Palindrome题意:给你个字符串,问最少加入多少字符可以让这个字符串变成回文字符串。思路:s为给定的字符串,e为s的逆序字符串。最少需要补充的字母数 = 原序列s的长度 — s和e的最长公共子串长度。原因仔细想想应该可以想出来。这道题就变成求s和e的最长公共子串长度。也就是LCS问题。在这里要注意定义二维数组空间会超限的,由于在LCS问题中都是相邻两个数进行比较,所以可以用滚动数组来优化空间。代码:#include<iostream>#include<原创 2022-05-16 16:41:42 · 410 阅读 · 0 评论 -
POJ 1080 Human Gene Functions(LCS变形)
传送门:Human Gene Functions题意:给你两个基因序列,你可以添加-,使得这两个序列相等且匹配值最大。匹配值计算见题目图片。思路:类似于LCS,在这里我们只考虑三种情况:1.a[i]与’-‘匹配时,dp[i][j]=dp[i-1][j]+val(a[i],’-‘)2.a[i]与b[j]匹配时,dp[i][j]=dp[i-1][j-1]+val(a[i],b[i])3.’-‘与b[j]匹配时,dp[i][j-1]+val(b[j],’-')在这里要注意怎么初始化,具体见代码。原创 2022-05-16 09:45:01 · 152 阅读 · 0 评论 -
POJ 1260 Pearls
传送门:Pearls题意:有c种不同品质的珍珠,分别给出各种珍珠的需求数目num和单价price,对于采购人员来说,要购买足够多数量的各种珍珠,但每种珍珠可以购买或者是要求的种类,或者是品质更好的珍珠。同时,为了避免有人只买一个珍珠,所以无论购买完成哪一种珍珠,都要交付10*price的额外成交价。 输入时以珍珠的递增价格输入。 要求计算购买足够的珍珠(可以以要求的品质购买,也可以选一些品质更高的珍珠)所需要的最小金钱。思路:这道题的意思有点难理解,写的时候我都不知道为啥可以以同一个价格来买原创 2022-05-15 16:17:23 · 193 阅读 · 0 评论 -
POJ 1836 Alignment
传送门:Alignment题意:使原队列的最少士兵出列后,使得新队列任意一个士兵都能看到左边或者右边的无穷远处。思路:就是使新队列的高度呈三角形分布,不过允许最高的两个人高度相等。假设第i位最高第i位左边是严格递增的序列,右边严格递减。所以我们要求两个dp数组,一个记录从左到右的最长上升子序列,另一个记录从右到左的最长上升子序列。在这里要注意并不是单纯的dp1[i]+dp2[i],而是dp1[i]+dp2[j],还有就是当i==j时,dp1[i]+dp2[j]还要再减一,具体原因自己再想想就知道了原创 2022-05-14 16:27:45 · 146 阅读 · 0 评论 -
POJ3267-The Cow Lexicon
传送门:The Cow Lexicon题意:给出一个主串,w个子串,问最少在主串删除多少字母,可以使其匹配到子串的单词序列。思路:定义dp[i]表示从第i个字母到最后一个字母所删除的字母数。然后从后往前循环遍历模拟判断即可。具体见代码和注释。在这里要注意一下我写的dp[i]的意义,我的是左闭右闭的区间!还有就是由于dp数组和主串子串数组下标起始位不同,所以写起来有点难理解。代码:#include<iostream>#include<stdio.h>#include&原创 2022-05-14 10:28:11 · 158 阅读 · 0 评论 -
poj1276 Cash Machine(多重背包变形)
传送门: Cash Machine题意:给你争取要获得的钱数, 货币种类和每种货币的数量, 求在不超过给的钱数的情况下,获得尽量多的钱。思路:一开始我是用常规动态规划的思路来写这道题的,定义dp[i][j]:用第i种货币所能支付的不超过j的钱数的最大钱数。但在实际写的过程中因为担心空间超限,所以我把它降为一维了。状态转移方程为:dp[j]=max(dp[j],dp[j-k✖dk[i]]+k✖dk[i]);可这种写法是会超时的,时间复杂度为O(nk✖N✖cash),即10的9次方。我们要想办法优化它原创 2022-05-13 16:43:56 · 735 阅读 · 1 评论 -
POJ1837-Balance(01背包变形)
传送门: Blance题目大意:给你一根杠杆,轴在中心标记位0,中心左边,从左到右标记-15,-14,…,-1,中心右端,1,2,3,…,15,表示到中心的距离。现在给你c个挂钩,g个砝码。告诉你挂钩位置和每个砝码的重量,要求用完所有砝码。问:使得杠杆平衡的方案数是多少?思路:01背包问题的变形题。在01背包中dp[i][j]表示放入第i个物品背包体积为j的最大价值,而在这里dp[i][j]表示放入第i个砝码(前面i-1个砝码都已放入)平衡度为j的最大方案数。平衡度指的是balance=左臂长(负原创 2022-05-13 10:40:30 · 678 阅读 · 0 评论