上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 26 下一页
摘要: 题意:有n个环形字符串,一个环形字符串移动会形成不能的字符串,我们把它们看作同一串字符串,求有多少个不同的字符串.......思路:用最小表示发将一个环形串的最小字典序找出来,然后让这个环形串按照这个顺序来组成一个新的串,其他串都这样处理,然后去重,输出结果就是了.......#include#include#include#includeusing namespace std;char s[10005][105];struct node{ char ch[105];}t[10005];int cmp(const node a,const node b){ if(strcmp(a.ch,b.c 阅读全文
posted @ 2013-08-08 11:06 紫忆 阅读(1033) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一串字符串,但是这串字符串是环形的,让你找个位置切开,使得它的字典序最小.......思路:典型的最小表示法.......#include#include#includeusing namespace std;char str[20000];int work(int m) { int i,j,l; i=0; j=1; while(im) break; if(str[(i+l)%m] > str[(j+l)%m]) i=i+l+1; else j=j+l+1; if(i... 阅读全文
posted @ 2013-08-08 10:08 紫忆 阅读(2234) 评论(0) 推荐(0) 编辑
摘要: 最小表示法: 初始时,i=0,j=1,分别以i,j,为起始点顺着i,j,往下比较直到找的str[i+k]!=str[j+k],然后分两种情况考虑:1、 str[i+k]>str[j+k],i变成i=i+k+1,j不变,然后继续往下比较。2、 str[i+k]m) break; if(str[(i+l)%m] > str[(j+l)%m]) i=i+l+1; else j=j+l+1; if(i==j) j=i+1; } if(i0) j = j+k+1; else i = i+... 阅读全文
posted @ 2013-08-08 09:59 紫忆 阅读(1314) 评论(0) 推荐(0) 编辑
摘要: 前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增、公共子序列写了个总结。反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报告都看不明白,而到了现在,遇到区间dp之类的题目,我不至于没有任何方向,慢慢的推导,有些题目没有自己想象的那么难,还是可以推导出转移方程的,有些题目,在自己推导过后,与解题报告相对照,也总能有一番全新的收获。我是觉得,解题报告需要看,但是怎么看,如何看,却是值得思量.......1、Light oj 1422 Halloween Costumes题意:给你n天需要穿的衣服的样式,每次可以套着穿衣服 阅读全文
posted @ 2013-08-04 10:48 紫忆 阅读(14515) 评论(1) 推荐(7) 编辑
摘要: 1、最长递增子序列模板poj2533(时间复杂度O(n*n))#include#include#includeusing namespace std;int dp[1005],a[1005];int main(){ int n; while(scanf("%d",&n)>0) { for(int i=1;ia[j]&&dp[i]maxx) maxx=dp[i]; printf("%d\n",maxx); } return 0;}2、最长递增子序列模板poj3903(时间复杂度O(nlogn))最长递增子序列,Longest. 阅读全文
posted @ 2013-08-03 21:03 紫忆 阅读(1810) 评论(0) 推荐(2) 编辑
摘要: 前言:背包问题在dp中可以说是经典,作为一个acmer,到现在才正式学习dp,可以说是比较失败的。我个人比较认同一点,想要做一个比较成功的acmer,dp、搜索、数学必须精练,比较遗憾的是,对我我自身而言,并没有早早的认识到这个问题,不过现在知道了,还有一年,也不算晚。还有,我建议学背包的童鞋,都看背包九讲......dp之01背包01背包,做为背包中最基础的一类背包,必须要掌握好,当然我这里说的掌握好,并不是说,你横扫hdu或者poj等oj上01背包模板题就可以的,记得很久以前,刚开始做背包问题,一天在hdu水了七八道,就自以为背包就是个模板,唉,真心不知道当时的自己是有多肤浅....... 阅读全文
posted @ 2013-08-03 17:35 紫忆 阅读(8167) 评论(2) 推荐(1) 编辑
摘要: http://acm.fzu.edu.cn/problem.php?pid=2030给出一个字符串,其中包括3种字符: ‘(‘, ‘)’, ‘?’.其中?表示这个字符可以是’(‘也可以是’)’. 现在给出字符串S,你可以在’?’处填写’(‘ 或者 ‘)’,当然随意填写得到的序列可能是括号不匹配的。例如”(?”,如果你填写’(‘那么”((“是括号不匹配的! 现在你的任务是确定你有多少种填写方案,使得最终的字符串是括号匹配的!2种方案是不同的,当2种方案中至少存在1个填写字符是不同的。 例如,对于”((??))”,我们可以得到2种方案: “((()))”, “(()())”。数据包含多组测试数据第 阅读全文
posted @ 2013-08-01 16:29 紫忆 阅读(613) 评论(0) 推荐(2) 编辑
摘要: http://lightoj.com/volume_showproblem.php?problem=1422题意:给你n天需要穿的衣服的样式,每次可以套着穿衣服,脱掉的衣服就不能再穿了,问至少要带多少条衣服才能参加所有宴会思路:我们从后往前推导,dp[i][j]代表从区间i到区间j最少的穿衣数量,那么在dp[i][j]这个状态的穿衣数,就要等于dp[i+1][j]+1;也就是说,首先在不考虑它后面是否有一天要穿相同的衣服的情况下,它肯定会比区间i+1到j的衣服多出一件;然后,再考虑在这个区间范围,是否有一天要穿相同的衣服,i#include#includeusing namespace std 阅读全文
posted @ 2013-08-01 11:48 紫忆 阅读(1117) 评论(0) 推荐(1) 编辑
摘要: 题目:给你一个n(1#include#include#includeusing namespace std;int dp[30][30];int n,m,len;int huafen(int w,int v){ int j=w+v; int tmp=n/(int)(0.5+pow(10,(double)(len-j))); tmp%=(int)(0.5+pow(10,(double)(j-w))); //printf("%d\n",tmp); return tmp;}int deal(int len,int m){ int maxx,tmp; for(int i=1;i0) 阅读全文
posted @ 2013-07-31 20:51 紫忆 阅读(1064) 评论(0) 推荐(0) 编辑
摘要: 题意:给你c(20表示存在,用0表示不存在,而这个题目又是求方法数,不需要再减去1........#include#include#includeusing namespace std;int dp[25][16000],s[25],t[25];int main(){ int n,m; while(scanf("%d %d",&n,&m)>0) { for(int i=1;i=1;j--) //01背包,每个砝码只能用一次 for(int k=1;k=0&&j+s[k]*t[i]<=15000&&dp[i-1][j 阅读全文
posted @ 2013-07-31 16:23 紫忆 阅读(2226) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 26 下一页