字符串问题
_夜风
我好懒怎么办
展开
-
hdu 1022
水题栈运用的基础题注释都在代码里AC代码:#include#include#define max 100using namespace std;int main(){ stacks; int n,i,j,k,result[max];//n为列车个数, result数组用来表示结果,1表示进栈。0表示出 char str1[max],str2[max原创 2014-12-17 10:56:42 · 369 阅读 · 0 评论 -
hdu 1022
这是以前写的解题报告吧,虽然很简单....还是贴出来吧,毕竟自己也是从菜鸟一步一步走过来的..... #include #include using namespace std;int main(){ stacks; int n; char a[100],b[100]; while(cin>>n>>a>>b) {原创 2014-12-10 22:48:22 · 406 阅读 · 0 评论 -
hdu 1087
hdu 1087这道题是用dp做出来的,也算是很巧妙的方法。。。。思路:首先第一个for遍历1-n,这个时候先设一个flag=0然后在遍历从1到i,因为题目求得是单调最长序列的和所以j每次都要在i前面,然后在满足啊a[i]>a[j]的情况下用flag记下j前面序列和的最大值,在遍历完j后此时flag存储了1-j中最大的sum和,此时,只要一步把a[i]加上,就可以表示s原创 2014-12-11 14:54:34 · 474 阅读 · 0 评论 -
nyoj 37
//nyoj 37 代码有点乱,和最长公共子序列很像,只是多加了一个数组,之前调用函数,一直超时,可是我看了下,为什么用一个整形数组存放倒置字符串竟然可以AC,我测试了下数据,打印出来的是一串地址,为什么为什么为什么啊。。。。#include #include #define Max(a,b) a>b?a:busing namespace std;int dp[100原创 2014-12-11 12:35:33 · 479 阅读 · 0 评论 -
nyoj 214
//nyoj 214这个题目和字符串的问题类似,都是给出一组数据,寻找最长的单调递增字符这一题一开始我用dp做,发现超时,看了下时间,n*n的复杂度,换过一种思路用类似于栈的方式,来存储每次更新过后的单调序列,里面二分查找很容易理解就是数组作用开始比较难理解,大致思路是先把输入数组的第一个元素放入Stack数组里然后一个for,从第二个元素开始,if每次判断和top顶元素大小,原创 2014-12-11 14:38:53 · 529 阅读 · 0 评论 -
nyoj 36
//这一题是 nyoj 36 是一道求最长公共子序列的题,也是用dp做出来的核心代码也就是一句,题目大概思路是先找到两组字符串里面相同的字母在二维数组里面更新每次比较过后dp的值,空想很难理解,自己在纸上画画就知道了实在不行就把那段代码记下来。。。还有我一直都不明白为什么我把dp数组放在主函数和while里面编译不过,而且我一直都怀疑二维数组没赋初值,可以显示初始值,那还要原创 2014-12-11 14:38:37 · 367 阅读 · 0 评论 -
HDU5311
题意:给一个指定的字符串a,要求分成三段,然后再给定另外一个字符串b,要求a中的三段能否在b中找到。思路:枚举+模拟,首先枚举给定的字符串a,因为分成三段,所以一共有(1+9)*9/2种情况,对于分成后的三段p,q,r先查找p在b中匹配后的下标,然后减去b,结果是匹配字符的前一个下标,所以这个时候要加上匹配的长度,才能确定下个匹配从哪里开始,最后只要匹配成功即可退出。#include#i原创 2015-07-27 14:27:39 · 741 阅读 · 0 评论 -
Codeforces#313
A题题意:给n个基础币值,问你是否能组成所有种类的币值,能则输出-1,不能则输出不能组成的最小币值。思路:理解了题意就明白了,1是关键解。#include #include using namespace std;int main(){ int n,i; while(cin>>n) { bool flag = false;原创 2015-07-27 20:27:39 · 555 阅读 · 0 评论 -
ZOJ1463
题意:给一个括号字符串,求解最少添加的字符能使整个字符串匹配。输入:s(未匹配的字符串)输出:S(匹配后的字符串)思路:绝壁超级坑的一道题,格式我不想说什么了,特坑,然后就是对给定的字符串,如果要求添加最小的字符满足添加后的能匹配,那么你需要在里面找到最大的子串,子串必须满足最大匹配量这个条件,所以对于i到j,利用状态转移方程MAX = max(MAX,map[i]原创 2015-07-20 21:08:45 · 455 阅读 · 0 评论 -
hdu 1166
题意: 给一组数,然后给多组询问,query(x,y)表示求x到y的数和,add(x,y)表示x上的数加上y,sub(x,y)表示x上的数减去y。这道题和1698的那题相似,只不过1698的是区间更新,处理要加一个lazy标记,这道题就不用,只是简单的点更新,比1698容易这两道题的代码很相似吧。。。。反正我写的差不多这里我贴下1698的链接:hdu 1698原创 2014-12-10 10:45:01 · 349 阅读 · 0 评论 -
单调最长递增子序列
// 再一次复习 最长单调递增子序列dp求法// 以前有过一次专门的总结,现在有点忘了,拿出来看看// 目前为止,我做过的这类题目就1.最长子序列和 2.字母和数字单调最长序列。。。后面继续总结 #include #include #include #include using namespace std;int main(){ char原创 2014-12-11 12:46:59 · 374 阅读 · 0 评论 -
hdu 1003
这个是暴力枚举求解的//hdu1003 这一题的代码我也不愿意整理了,乱就乱吧这一道题已经写了至少五遍了,也没什么好说的了,核心代码就是第二个for那里自己在纸上写写就清楚了,后面一个for找最大,然后依据这个最大的可以推出是从哪里开始的,根据就是每次往回加一个然后判断和是否等于最大的,在纸上写写就清楚了。。。。 #include #include u原创 2014-12-11 14:38:00 · 515 阅读 · 0 评论 -
hdu 1087
水题最长递增子序列和,dp更好AC代码:#include #include #define MAX(a,b) a>b?a:busing namespace std;int main(){ int i,sum[1000],a[1000],n,j; while(cin>>n&&n) { for(i=1;i<=n;i++)原创 2014-12-17 11:06:24 · 332 阅读 · 0 评论 -
hdu 2029
水题AC代码:#include#includeusing namespace std;int main(){ int i,j,T; char a[100]; cin>>T; while(cin>>a,T--) { j=strlen(a)-1; int flag=0; for(i=0;i<j+1;i++) {原创 2014-12-17 11:25:37 · 395 阅读 · 0 评论 -
hdu 2203
题意: 子串问题水题,只要把母串*2,然后比较......感觉我好懒....没有自己写函数......反正我不是勤快的人......... AC代码:#include #include #include using namespace std;int main(){ char a[100010],b[100010],c[100010];原创 2014-12-06 11:05:49 · 387 阅读 · 0 评论 -
hdu 1870
水题。。。。AC代码:#include #include using namespace std;int main(){ char str[1010]; int i,k; while(scanf("%s",&str)!=EOF) { queueq; for(i=0;str[i]!='B';i++) { if(str[i]=='(') q.p原创 2014-12-10 11:57:43 · 382 阅读 · 0 评论 -
N!水题
//题目是求N!的问题,思路:设定一个整形数组来存放每次计算过后的值有两个for循环,第一个for循环每次加进一个数然后在第二个for循环里面计算出此时的阶乘,比如9999,先给出i=2在第二个for循环里面计算出2的阶乘,保存在数组里,然后i=3,在计算3的阶乘,后面以此类推。。。#include#include #include#include#define N原创 2014-12-11 12:38:24 · 441 阅读 · 0 评论 -
表达式--栈的实现(数据结构)
这段代码对一些读入的非法数据判断存在错误比如像出现 a++b 就无法判断了另外需要注意的是我觉得栈里面存储的是char型的,但是在操作数值的时候,会很不方便还有一点在主函数里面如果想用while来多次读入数据的话,那么你要考虑上一次输入数据失败后,那后面的字符该怎么操作上面出现的问题大家可以尝试着去解决以下是根据书上的代码简单敲出来的 bool In(char c)原创 2014-12-11 12:42:37 · 390 阅读 · 0 评论 -
nyoj 17
// nyoj 17 代码如上,用的是dp,总的来说就是对一个字符串从末尾开始比较,设定一个数组,存放每个单调字串的最大长度,最后比较。。。//要注意的就是里面if语句对于每次字符比较后,更新数组,自己在纸上画画就清楚了。。。 #include #include using namespace std;int main(){ int i,原创 2014-12-11 14:37:30 · 411 阅读 · 0 评论 -
nyoj 44
//nyoj 44//和上面一题一样,求子串和,但是代码非常简洁。。。。。 时间复杂度为n #include using namespace std;int main(){ int i,t,n,first,later; cin>>t; while(t--) { cin>>n>>first;原创 2014-12-11 12:52:41 · 358 阅读 · 0 评论 -
最优子序列问题
最优子序列问题 问题描述:把一个包含n个正整数的序列划分成m个连续的子序列(每个正整数恰好属于一个序列)设第i个序列的各数之和为S(i),你的任务是让所有S(i)的最大值尽量小。例如序列1,2,3,2,5,4划分成3个序列的最优方案为1,2,3|2,5|4,其中S(1),S(2),S(3)分别为6,7,4,最大值为7;如果划分成1,2|3,2|5,4,则最大值为9,不如刚才的好。N原创 2015-11-07 10:09:30 · 3514 阅读 · 2 评论