07 2011 档案
摘要:先开始想了个错的……唉现在思维还进化地不足啊……首先要发现的是添加和删除是一样的,所以我们在选cost的时候只用选delete和add的较小值就可以了。状态转移方程:if(st[i]==st[j])dp[i][j]=dp[i+1][j-1];else if(st[i]!=st[j])dp[i][j]=max(dp[i+1][j]+cost[st[i]-'a'],dp[i][j-1]+cost[st[j]-'a']);在用记忆化搜索解决。注意边界情况,否则会搜死。//time:157MS//memory:16260K#include<cstdio>#i
阅读全文
摘要:题目看得我纠结死了……大意是,在一条线上有`N个城市,它们由一个污水处理系统连接着,每个城市有三个选择:1.把自己的污水排到河里V2.把自己的污水送到右边>3.把自己的污水送到左边<至少要有一个城市排水。要求给N个城市,方案种数。最左边只有两种选择:V,>令 dp[i][0]:V dp[i][1]:> dp[i][2]:<则:dp[i][0]=dp[i-1][0]+dp[i-1][1]+dp[i-1][2] dp[i][1]=dp[i-1][0]+dp[i-1][1]+dp[i-1][2] dp[i][2]=dp[i-1][0]+dp[i-1][2]//刚开始总是
阅读全文
摘要:大意:一群牛想要跳到月亮上面去,但是他们现在跳的能力为零。现在给你一些药水,能改变他们跳的能力。不能改变药水的顺序。当跳奇数跳的时候,就增加,当跳偶数跳的时候就减少。药水是可以跳过不喝的。先开始想的是把最大值最小值用一个二维数组表示,结果怎么想都想不出来,主要还是想到了要记步数,后来才去看解题报告,上面说什么开个二维数组,可以表示奇数步和偶数步。选与不选这个问题,在代码里面说明吧~~~#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<c
阅读全文
摘要:本来这个题是用字典树等等神算法实现的……结果我直接暴搞的。。。先开始写的LCS,后来超时惨了……就在网上查……结果发现LCS完全没必要,只用写一个o(n)的判断就可以了……#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>struct dict{ char s[30]; int len;};dict d[10010];int judge(char a[],char b[]){ int sum=0; int pos=-1; int size=strlen(b);
阅读全文
摘要:今天对着课件写了一个串的hash ha是最初的hash值,t是最终存放在数组里面的hash值,就是数组下标。由于不同的串产生的ha不一样,让hash[t]=ha,就可以判断当前的串是不是和原来的那个串一样了#include<cstdio>#include<cstdlib>#include<cstring>#define MAXN 7003int max;int hashtable[MAXN],count[MAXN];unsigned int hash(char *s){ unsigned int seed=131; unsigned int h=0; whi
阅读全文
摘要:虽然看不懂……但是还是先存下吧~~~// RS Hash Functionunsigned int RSHash(char* str){ unsigned int b = 378551 ; unsigned int a = 63689 ; unsigned int hash = 0 ; while (*str) { hash = hash * a + (*str ++ ); a *= b; } return (hash & 0x7FFFFFFF );}// JS Hash Functionunsigned int JSHash(char* str){ unsigned int hash
阅读全文
摘要:hdu 1496 Equations ——hash
阅读全文