摘要: 题目的意思就是要统计一系列字符串中某一个字符串出现的最多次数。刚开始的时候,想到使用map来处理map 字符串,出现的次数,读入一个就在其中查找如果存在 int +1;最后找到最大的int对应的string 就ok了……本人技拙,不知道怎么处理,望大神们赐教……还是说说,AC的做法:使用vector来处理读入全部的元素之后,对所有的元素排序(方便查找相同的元素),然后在判断每个元素的次数,找出次数最大的对应的string,OK!#include#include#include#includeusing namespace std;int main(){ string str; in... 阅读全文
posted @ 2013-08-04 16:31 平林新袖 阅读(173) 评论(0) 推荐(0) 编辑
摘要: Problem Description搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的平方成正比(这里补充一句,xhd每次搬两件东西,左手一件右手一件).例如xhd左手拿重量为3的物品,右手拿重量为6的物品,则他搬完这次的疲劳度为(6-3)^2 = 9.现在可怜的xh 阅读全文
posted @ 2013-08-04 11:40 平林新袖 阅读(315) 评论(0) 推荐(1) 编辑
摘要: 首先需要说一下的是,什么是公共子序列。子串的概念就是,一个字符串中连续的一部分, 而子序列,可以是不连续的。•一个给定序列的子序列是在该序列中删去若干元素后得到的序列。•给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。•最长公共子序列:公共子序列中长度最长的子序列。【穷举法】•对于每一个Xm的子序列,验证它是否是Yn的子序列.•Xm有2m个子序列•每个子序列需要o(n)的时间来验证它是否是Yn的子序列.–从Yn的第一个字母开始扫描下去,如果不是则从第二个开始•运行时间: o(2^n*2^m)【动态规划】•两个字符串【横向,纵向排列】ABDTFGHF 阅读全文
posted @ 2013-08-03 22:02 平林新袖 阅读(245) 评论(0) 推荐(0) 编辑
摘要: void MaxSubSet_2(int nums[], int length) { if (length == 0) return; int start = 0; int sum = nums[0]; int maxStart = 0; int maxEnd = 0; int maxSum = nums[0]; for (int i = 1; i maxSum) { maxStart = start; maxEn... 阅读全文
posted @ 2013-08-02 16:15 平林新袖 阅读(110) 评论(0) 推荐(0) 编辑
摘要: //o(n*n)【暴力搜索】再一个数列中,查找一个连续子数列,使该连续子数列的和最大。依次以序列的每一个数为子数列的开头,遍历所有的情况,时间复杂度为o(n*n)。#includeusing namespace std;void MaxSubSet_1(int nums[], int length){ if (length == 0) return; int start = 0; int end = 0; int maxSum = nums[0]; int sum; for (int i = 0; i maxSum) { start = i; end = j; ma... 阅读全文
posted @ 2013-08-02 16:06 平林新袖 阅读(164) 评论(0) 推荐(0) 编辑
摘要: //最长上升子序列#include#includeusing namespace std;const int maxn = 10100;int a[maxn],dp[maxn];int n,k;//a[] 保存原始数据//dp[i] 表示原始数中以i结尾的上升子序列的长度int res(){ dp[0] = 1; int max = 0; for(int i = 1;ia[j] && dp[i] >n; for(int i = 0;i>a[i]; couta[j] && dp[i] < (dp[j]+1)) { dp[i] = dp[j]+1; 阅读全文
posted @ 2013-08-02 15:38 平林新袖 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 从倒数第二列开始查找核心代码:a[i][j]+=max(a[i+1][j],a[i+1][j+1]);a[i][j] 加上他下面的两个数中的最大者……到最后a[0][0]就是最终的最大值。#include #include#define maxn 100 using namespace std; int main() { int a[maxn+1][maxn+1],i,j,n; cin >>n; for (i=1;i>a[i][j]; for (i=n-1;i>=1;i--) for (j=1;j<=i;j++) a[i][j]+=max(a[i+1][j],a[ 阅读全文
posted @ 2013-08-02 15:34 平林新袖 阅读(226) 评论(0) 推荐(0) 编辑
摘要: n给一个整数n,要你找一个值为n的表达式,这个表达式只有1 + * ( ) 够成。并且1不能连续,比如11+1就不合法。n输入n,(1#include#includeusing namespace std;int dp[1000];void dps(){ int i,j; dp[0]=0; dp[1] = 1; for(i = 2;i<1000;i++) { dp[i] = i; for( j = 1;j<i;j++) { dp[i] = min(dp[i],dp[j]+dp[i-j]); ... 阅读全文
posted @ 2013-08-02 13:32 平林新袖 阅读(238) 评论(0) 推荐(0) 编辑
摘要: HDU中的DP---动态规划//Made by syx //Time 2010年8月15日 10:13:12 // //小结:DP的基本思想 如果各个子问题不是独立的,不同的子问题的个数只是多项式量级, 如果我们能够保存已经解决的子问题的答案,而在需要的时候再找 出已求得的答案,这样就可以避免大量的重复计算。 由此而来的基本思路是——用一个表记录所有已解决的子 问题的答案,不管该问题以后是否被用到,只要它被计算过,就将 其结果填入表中。/* //1421 搬寝室#include #include #define size 2005 #define INIT 2147483646in... 阅读全文
posted @ 2013-08-02 09:04 平林新袖 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 五大常用算法之二:动态规划算法一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。 由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次, 阅读全文
posted @ 2013-07-20 15:57 平林新袖 阅读(325) 评论(0) 推荐(0) 编辑