摘要: n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?分析: 一个显然的策略是按照人的体重排序。 极端化贪心策略,最重的人要上船——如果最重的人和最轻的人体重总和不超过船的承重, 阅读全文
posted @ 2016-12-25 08:37 一蓑烟雨任生平 阅读(493) 评论(0) 推荐(0) 编辑
摘要: 约翰认为字符串的完美度等于它里面所有字母的完美度之和。每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数。 约翰不在乎字母大小写。(也就是说字母F和f)的完美度相同。给定一个字符串,输出它的最大可能的完美度。例如:dad,你可以将26分配给d,25分配给a,这样整个 阅读全文
posted @ 2016-12-25 08:34 一蓑烟雨任生平 阅读(717) 评论(0) 推荐(1) 编辑
摘要: 将一堆正整数分为2组,要求2组的和相差最小。例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的。 整数个数n<=100,所有整数的和<=10000 初看题目,第一想到贪心。怎么贪?排序,每次把数放到“最有利”的一边,最有利指的是每次都把数放到使得结果 阅读全文
posted @ 2016-12-25 08:26 一蓑烟雨任生平 阅读(510) 评论(0) 推荐(0) 编辑
摘要: (LIS Longest Increasing Subsequence)给定一个数列,从中删掉任意若干项剩余的序列叫做它的一个子序列,求它的最长的子序列,满足子序列中的元素是单调递增的。 例如给定序列{1,6,3,5,4},答案是3,因为{1,3,4}和{1,3,5}就是长度最长的两个单增子序列。处 阅读全文
posted @ 2016-12-25 08:20 一蓑烟雨任生平 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 给定两个字符串S和T,对于T我们允许三种操作: (1) 在任意位置添加任意字符(2) 删除存在的任意字符(3) 修改任意字符 问最少操作多少次可以把字符串T变成S? 例如: S= “ABCF” T = “DBFG” 那么我们可以 (1) 把D改为A(2) 删掉G(3) 加入C 所以答案是3。 分析: 阅读全文
posted @ 2016-12-25 08:15 一蓑烟雨任生平 阅读(3801) 评论(1) 推荐(4) 编辑
摘要: 一些概念: (1)子序列: 一个序列A = a1,a2,……an,中任意删除若干项,剩余的序列叫做A的一个子序列。也可以认为是从序列A按原顺序保留任意若干项得到的序列。例如: 对序列 1,3,5,4,2,6,8,7来说,序列3,4,8,7 是它的一个子序列。对于一个长度为n的序列,它一共有2^n 个 阅读全文
posted @ 2016-12-25 08:06 一蓑烟雨任生平 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 给出一个整数数组a(正负数都有),如何找出一个连续子数组(可以一个都不取,那么结果为0),使得其中的和最大? 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。 看见这个问题你的第一反应是用什么算法? (1) 枚举?对,枚举是万能的!枚举什么?子数组的位置!好枚举 阅读全文
posted @ 2016-12-25 08:02 一蓑烟雨任生平 阅读(342) 评论(0) 推荐(2) 编辑
摘要: 给定一个m行n列的矩阵,矩阵每个元素是一个正整数,你现在在左上角(第一行第一列),你需要走到右下角(第m行,第n列),每次只能朝右或者下走到相邻的位置,不能走出矩阵。走过的数的总和作为你的得分,求最大的得分。 初看此题,你的思路是什么? (1) 贪心? 先走到大的数再说?看这个例子: 无论你以什么方 阅读全文
posted @ 2016-12-25 07:46 一蓑烟雨任生平 阅读(485) 评论(0) 推荐(0) 编辑
摘要: 作为动态规划的基础,01背包的思想在许多动规问题中会经常出现,so,熟练的掌握01背包的思路是极其重要的; 有n件物品,第i件物品(I = 1,2,3…n)的价值是vi, 重量是wi,我们有一个能承重为m的背包,我们选择一些物品放入背包,显然放入背包的总重量不超过m。我们要求选择物品的总价值最大,请 阅读全文
posted @ 2016-12-24 17:20 一蓑烟雨任生平 阅读(303) 评论(0) 推荐(1) 编辑
摘要: 将01背包,完全背包,和多重完全背包问题结合起来,那么就是混合三种背的问题 根据三种背包的思想,那么可以得到混合三种背包的问题可以这样子求解 for(int i=1; i<=N; ++i) if(第i件物品是01背包) zeroOnePack(c[i],w[i]); else if(第i件物品是完全 阅读全文
posted @ 2016-12-24 15:09 一蓑烟雨任生平 阅读(167) 评论(0) 推荐(0) 编辑