HDU
文章平均质量分 80
知足c
Good afternoon, Good evening and Good night~
展开
-
HDU 2844 Coins (组合背包)
题意 给你n种面额不同的金币和每种金币的个数 求这些金币能组合成的面额在m内有多少种还是明显的背包问题 d[i]表示这些金币在i内能组合成的最大面额 初始化d为负无穷 d[0]=0 这样就可以保证d[i]恰好为i时才能为正值原因可以自己想想 然后就用背包背吧 直接多重背包也可以过 但是分成多重背包和完全背包要快一点原创 2014-08-10 14:49:34 · 859 阅读 · 0 评论 -
HDU 2830 Matrix Swapping II (DP,最大全1矩阵)
题意 给你一个n*m矩阵 每列都可以随便交换位置 求最优交换后最大的全1子矩阵又是HDU 1505 1506的变种 但这个更容易了 因为每列都可以交换位置了 那么这一行中所有比i高的都可以与i相邻了 只需要统计这一行有多少个比i高就行了 可以在算出每一行后 把高度大的放前面去 用num[i]记录排序后的列原来的数 这样就有j列比h[i][num[j]]高了 最后的答案也就是max(j*h[i][num[j]])原创 2014-08-11 19:26:03 · 879 阅读 · 0 评论 -
HDU 1058 Humble Numbers(DP,数)
题意 所有只能被2,3,5,7这4个素数整除的数称为Humble Number 输入n 输出第n个Humble Number1是第一个humble number 对于一个Humble Number a 有2*a,3*a,5*a,7*a都是Humble Number 可以以1为基数 依次展开即可得到一定范围内的Humble Number 用i,j,k,l分别记录 2,3,5,7分别乘到了第几个Humble Number 当前在计算第cnt个Humble Number 那么有 hum[c原创 2014-08-12 10:14:16 · 908 阅读 · 0 评论 -
HDU 2870 Largest Submatrix(DP)
题意 求最大相同字符子矩阵 其中一些字符可以转换其实就是HDU1505 1506的加强版 但是分了a,b,c三种情况 看哪次得到的面积最大对于某一个情况 可以把该字符和可以转换为该字符的位置赋值0 其它位置赋值1 这样就转化成了求最大全0矩阵的问题了对于转换后矩阵中的每个点 看他向上有多少个连续0 把这个值存在h数组中 再用l数组和r数组记录h连续大于等于该位置的最左边位置和最右位置 这样包含(i,j)点的最大矩阵面积就是(r[i][j]-l[i][j]+1)*h[i][j] 面积最大的点就原创 2014-08-11 14:27:12 · 921 阅读 · 0 评论 -
HDU 2845 Beans(DP,最大不连续和)
题意 吃豆子游戏 当你吃了一个格子的豆子 该格子左右两个和上下两行就不能吃了 输入每个格子的豆子数 求你最多能吃多少颗豆子可以先求出每行你最多可以吃多少颗豆子 然后每行就压缩成只有一个格子了 里面的豆子数就是那一行最多可以吃的豆子数 然后问题就变成求一列最多可以吃多少颗豆子了 和处理每一行一样处理 那么问题就简化成求一行数字的最大不连续和问题了令d[i]表示某一行前i个豆子的最大和 有两种情况 吃第i个格子中的豆子和不吃第i个格子中的豆子 a[i]为原创 2014-08-11 20:42:14 · 956 阅读 · 0 评论 -
HDU 1978 How many ways(DP)
题意 中文 但要注意小于你能量的点也是能到达的令d[i][j]表示到达第i行第j列的方法数 初始化为0 d[1][1]为1 输入一个点的能量t后 枚举这个点能到的所有点(i+x,j+y)(x+y<=t) 有d[i+x][j+y]+=d[i][j] 因为只能向右走和向下走 可以保证每次更新后均为当前最优解 输入最后一个点后 就得到答案了原创 2014-08-14 09:51:53 · 852 阅读 · 0 评论 -
HDU 1081 To The Max(DP)
题意 求一个n*n矩阵的最大子矩阵和HDU 1003 max sum 的升级版 把二维简化为一维就可以用1003的方法去做了 用mat[i][j]存 第i行前j个数的和 那么mat[k][j]-mat[k][i]就表示第k行 第i+1个数到第j个数的和了 再将k从一枚举到n就可以得到这个这个宽度为j-i的最大矩阵和了 然后i,j又分别从1枚举到n就能得到结果了 和1原创 2014-08-17 15:32:21 · 865 阅读 · 0 评论 -
HDU 1789 Doing Homework again(贪心)
题意 某大参加ACM竞赛回来落下很多作业 每个作业都有最后期限 没在最后期限之内做完期末就要扣掉对应的分 求最少扣多少分把所有作业按扣分大小从大到小排序 然后就贪阿 能完成前面的就完成前面的 实在不能的就扣分吧~#include#include#includeusing namespace std;const int N = 1005;int dli[N], r原创 2014-08-14 20:13:57 · 1157 阅读 · 0 评论 -
HDU 1078 FatMouse and Cheese(DP)
题意 老鼠在一个小镇吃奶酪 城镇可以看成一个n*n的矩阵 其中每个格子都有一定数量的奶酪mat[i][j] 老鼠从(0,0) 开始吃 而且下个吃的格子里的奶酪必须比上个格子多 老鼠只能水平方向或者垂直方向走 而且每次走的距离不能超过k 求老鼠最多能吃多少奶酪起点是固定的 比较容易 直接记忆化搜索令d[i][j]表示以(i,j)为终点的最优解 那么对于所有(i原创 2014-08-17 14:52:35 · 1006 阅读 · 0 评论 -
HDU 1160 FatMouse's Speed(DP)
题意 输入n个老鼠的体重和速度 从里面找出最长的序列 是的重量递增时速度递减简单的DP 令d[i]表示以第i个老鼠为所求序列最后一个时序列的长度 对与每个老鼠i 遍历所有老鼠j 当(w[i] > w[j]) && (s[i] #include#includeusing namespace std;const int M=1005;int w[M], s[M], d[原创 2014-08-15 16:35:16 · 960 阅读 · 0 评论 -
HDU 1300 Pearls(DP)
题意 珠宝店到珍珠批发商进货 第i种价格为p[i]的珍珠需要n个 则珍珠的结算价格为∑(n+10)*p[i] 由于没种珍珠的数量结算时都要加上10 所以有时候把便宜的珍珠换为贵的结算价格反而变少了 给你一张购买清单 珍珠价格是递增的 每种珍珠都可以替换为比它贵的 求最少总花费简单dp 令d[i]表示前i种珍珠的最少花费 sum[i]表示第1种到第第i种的总数原创 2014-08-18 10:49:27 · 1066 阅读 · 0 评论 -
HDU 1114 Piggy-Bank(完全背包 DP)
题意 知道空存钱罐的重量和装满钱的存钱罐的重量及每种币值的重量 求存钱罐里至少有多少钱 裸的完全背包 但是是求最小值 所以初始0要变成初始INF max也要变成min原创 2014-08-15 15:23:33 · 983 阅读 · 0 评论 -
HDU 1501 Zipper(DP,DFS)
题意 判断能否由字符串a,b中的字符不改变各自的相对顺序组合得到字符串c本题有两种解法 DP或者DFS考虑DP 令d[i][j]表示能否有a的前i个字符和b的前j个字符组合得到c的前i+j个字符 值为0或者1 那么有d[i][j]=(d[i-1][j]&&a[i]==c[i+j])||(d[i][j-1]&&b[i]==c[i+j]) a,b的下标都是从1开始的 注意0的初始化原创 2014-08-18 08:42:45 · 935 阅读 · 0 评论 -
HDU 1069 Monkey and Banana(DP 长方体堆放问题)
题意 给你n种长方体 每种都有无穷个 三条棱长为a,b,c 当一个长方体的长宽都小于另一个时 这个长方体就可以堆在另一个上面 求这些长方体能堆起的最大高度每个长方体都有6种放置方式 但只有三种高度 分别为a,b,c 为了便于操坐 可以把一个立方体分为三个 每个的高度都是唯一的 然后就可以用最长连通来求了 令d[i]表示以第i个长方体为最顶上一个时的最大高度 当第i个长方体的长和宽小于第j个的长和宽或宽和长时 第i个就可以放在第j个上面 即d[i]=max(d[i],d[j]+原创 2014-08-09 20:22:35 · 1323 阅读 · 0 评论 -
HDU 1171 Big Event in HDU(多重背包)
题意 把一堆东西尽量分为两份 第一份不小于第二份把所有东西的总价值s除以2 让它装尽量多的东西作为第二份 剩下的就是第一份了 题目有个小坑点 是以负数作为结束条件的 不是-1 还有不要开始把s/=2 后来第一份又用s*2-d[s] 因为s/2*2不一定等于s了原创 2014-08-10 08:14:20 · 1275 阅读 · 0 评论 -
HDU 4882 ZCC Loves Codefires(贪心)
ZCC Loves CodefiresTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 223 Accepted Submission(s): 123Problem DescriptionThou原创 2014-07-24 23:24:10 · 2081 阅读 · 0 评论 -
HDU 4883 TIANKENG’s restaurant Bestcoder 2-1(模拟)
TIANKENG’s restaurantTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0Problem DescriptionTIANKEN原创 2014-07-27 21:59:30 · 990 阅读 · 0 评论 -
HDU 4907 BestCoder3_1 Task schedule
Task scheduleTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0Problem Description有一台机器,并且给你这台机器的工原创 2014-08-03 22:38:52 · 886 阅读 · 0 评论 -
HDU 1506 Largest Rectangle in a Histogram(DP)
可以发现 当第i-1个比第i个高的时候 比第i-1个高的所有也一定比第i个高 于是可以用到动态规划的思想令left[i]表示包括i在内比i高的连续序列中最左边一个的编号 right[i]为最右边一个的编号那么有 当h[left[i]-1]>=h[i]]时 left[i]=left[left[i]-1] 从前往后可以递推出left[i] 同理 当h[right[i]+1]>=h[i]]时 right[i]=right[right[i]+1] 从后往前可递推原创 2014-08-05 08:49:55 · 1602 阅读 · 0 评论 -
HDU 1505 City Game(DP)
1506的升级版 只是多了一维 h要自己算 详情看上一篇原创 2014-08-05 12:00:49 · 943 阅读 · 0 评论 -
HDU 1003 Max Sum(dp,最大连续子序列和)
题意 求n个数字的最大连续和DP的入门题目 令d[i]表示以第i个数a为右端的最大连续子序列和 那么很容易得出转移方程 d[i]=max(d[i-1]+a,a)很显然 当第i个数比以第i-1个数为右端的最大和加上第i个数还大的时候 以第i个数为右端的最大和就是第i个数自己了 同时更新左端为自己原创 2014-08-07 10:06:51 · 956 阅读 · 0 评论 -
POJ 3623 Best Cow Line, Gold(模拟)
题意 给你一个字符序列 你每次可以从它的头部或尾部拿出一个字符组成一个新的字符序列 输出这样做能达到的最小的字符序列 每行最多输出80个字符(开始被这个坑了好久)直接模拟就行 哪边小就选哪边 相等就往内看#include#include#includeusing namespace std;const int N = 30010;int main(){原创 2014-08-19 19:38:21 · 1348 阅读 · 0 评论 -
HDU 3008 Warcraft (DP)
题意 你去打boss 开始你的蓝和血还有boss的血都是100 每秒你先打boss一下 然后boss打你一下你减少q点血 你有n个技能 第i个技能耗蓝a[i] 对boss的伤害为b[i] 普攻伤害为1 而且你每秒回复t点蓝(恢复后不超过100) 求你最少可以多少次打死boss你最多能打100/q或者100/q+1次 令d[i][j]表示第i秒所剩蓝量为j时bos原创 2014-08-18 15:56:54 · 1112 阅读 · 0 评论 -
HDU 2159 FATE(二维完全背包)
中文题目就不用解释了 就是裸的二维完全背包d[i][j]表示消耗i忍耐杀j个怪最多可获得的经验 然后就用完全背包来做了 二维背包背包不过是多了一重循环原创 2014-08-10 09:03:58 · 981 阅读 · 0 评论 -
HDU 2577 How to Type(模拟)
题意 给你一个由大写字母和小写字母组成的字符串 模拟键盘输入的最少按键次数直接模拟每个字符的输入 flag表示capslock的状态 1表示打开 0为关闭 开始是和输入完毕都是关闭的关闭的 用plu记录shift和capslock的按键次数当接下来输入的字母有连续n个跟capslock状态不同时 分析可只 只有n=1时适合用shift键 如flag=1 n=1 输入a时 shift+a=2 而capslock+a+capslock=3n>=2 如输入ab是 shi原创 2014-08-10 13:26:46 · 1089 阅读 · 0 评论 -
HDU 1421 搬寝室(DP)
先把物品重量从小到大排序 d[i][j]表示前i件物品选j对的最小疲劳 若选了第i个物品 那么和它一对的必是第i-1个物品 注意是前i件i=j*2时 没有选择 d[i][j]=d[i-2][j-1]+(w[i]-w[i-1])^2i>j*2时 存在第i个选或者不选之分若选了第i个的话 那么问题就转化为在i-2个物品中选j-1个了若不选第i个的话 问题转化为在i-1个物品中选j个了那么就有转移方程d[i][j]=min(d[i-1][j],d[i-2][j-1]+(w[i]-w[i-1原创 2014-08-11 10:12:42 · 846 阅读 · 0 评论 -
HDU 1087 Super Jumping! Jumping! Jumping!(DP)
题意 求n个数字的和最大的递增子序列基础的dp题目 令d[i]表示以第i个数字结尾的和最大的递增子序列 有d[i]=max(d[i],d[j]+a[i]) j为1到a之间的数 且a[i]>a[j]原创 2014-08-09 19:24:36 · 985 阅读 · 0 评论 -
HDU 2602 Bone Collector(01背包)
裸的01背包啦啦啦啦原创 2014-08-09 16:53:48 · 945 阅读 · 0 评论 -
HDU 2059 龟兔赛跑(DP)
题意 中文简单的多阶段决策DP 令p[0]=0 p[n]=l d[i]表示乌龟从起点到第i个加油站所需的最小时间 那么有d[i]=min(d[i],d[j]+t(j,i)) t(j,i)表示 在第j个加油站加满油 然后直接开到第i个加油站 当然第0个加油站是起点就不用加油了 这样推到最后d[n]就是乌龟所需的最小时间了#include#include#原创 2014-08-18 19:42:13 · 1075 阅读 · 0 评论