摘要: f[i]=min(f[i],num-strlen(word)+f[i+num])注意数组范围match非常巧妙的运用了j与i的匹配dp两层循环加一个函数(计算距离)#include <stdio.h>#include <string.h>#define maxn 605#define maxl 305int n,m;char str[maxl],map[maxn][maxl];int f[maxl];int min(int k,int t){ return k>t?t:k;}int match(char *st1, char *st2){ if (st1[0] ! 阅读全文
posted @ 2012-04-06 16:17 shijiwomen 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 做的第一个字典树,非常直观第一类是求前缀有多少个,第二类是求前缀是否在一串字符中出现主要是字典树的构造,使用了一个嵌套的结构体,使用了指针,非常方便也非常巧妙,还有就是root,newnode必须初始空间bananabandbeeabsoluteacmbabbandabc#include <stdio.h>#include <string.h>#include <malloc.h>struct dictree{ dictree *child[26]; int n;};struct dictree *root;void insert(char *str){ s 阅读全文
posted @ 2012-04-06 15:27 shijiwomen 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 其中巧妙的运用了优先队列,将哈夫曼树的精髓给表达了出来需要注意的是其中的优先队列的定义,一定要有自定义比较#include <iostream>#include <cstdio>#include <queue>using namespace std;struct node{ __int64 value; bool operator <(const node &a)const { return value>a.value; }}temper;int main(){ priority_queue<node> qu; int i,n 阅读全文
posted @ 2012-04-06 11:26 shijiwomen 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 注意问题的转换,有环,无序,有序,还有他们的包含分界点其中将字母装换成数字节点很妙#include <stdio.h>#include <string.h>int map[27][27],indegree[27],q[27];int n,m;int topsort(){ int i,num,flag,j,start; int temp[27],c; c=0; flag=1; for(i=1;i<=n;i++) temp[i]=indegree[i]; for(i=1;i<=n;i++) { num=0; for(j=1;j<=n;j++) { if(t 阅读全文
posted @ 2012-04-06 10:11 shijiwomen 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 就是不断选择最小的 不断更新最短距离,本题要注重问题的转换4aaaaaaabaaaaaaabaaaaaaabaaaa0#include <stdio.h>#define MAX 2005int vis[MAX];int distans[MAX];char str[MAX][7];int n;int sum,min;int dist(char *str1,char *str2){ int d,i; for(i=0,d=0;i<7;i++) { if(str1[i]!=str2[i]) d++; } return d;}int prim(){ int i,v,j; sum=0; 阅读全文
posted @ 2012-04-06 09:25 shijiwomen 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 注意平角,钝角的判定,其中主要是s=0.5*sin@*a*b 公式的运用21 1 2 21 1 1 0#include <stdio.h>#include <math.h>int main(){ double x1,y1,x2,y2,s,len1,len2,k; int t; scanf("%d",&t); while(t--) { scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2); s=fabs(x1*y2-y1*x2); len1=sqrt(x1*x1+y1*y 阅读全文
posted @ 2012-04-06 08:51 shijiwomen 阅读(329) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<cmath>int main(){ double n,p; while(scanf("%lf%lf",&n,&p)!=EOF) { printf("%.0f\n",pow(p,1/n)); } return 0; } 阅读全文
posted @ 2012-04-05 10:29 shijiwomen 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 一般是BFS(DFS)+hash,每一个状态化成一个01组成的hash数字,作为状态转移,直到目标状态,这是很妙的一个转换,一般还会配置一个结构体记录状态,这也很关键 阅读全文
posted @ 2012-04-05 08:53 shijiwomen 阅读(130) 评论(0) 推荐(0) 编辑
摘要: kmp是从最初的字符串匹配算法优化而来的,其中就是多了一个函数值函数,记录最后的匹配的,从而得到优化,有回溯的感觉。只是对kmp的函数值函数求法有的不理解#include <iostream>#include <cstdio>#include <string.h>using namespace std;int n[1000];char str1[1000];char str2[1000];int sum;void kmp(char *p,int next[]){ int i; int j=0; int k=-1; next[0]=-1; while(p[j] 阅读全文
posted @ 2012-04-04 19:04 shijiwomen 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 我晕了,其中的逻辑没理解,从里面转不出来,不知为啥为防止遗忘,记忆函数值的计算,见百度#include <stdio.h>void kmp(char *p,int next[]){ int i; int j=0; int k=-1; next[0]=-1; while(p[j]!='\0') { if(k==-1||p[j]==p[k]) { j++; k++; if(p[j]!=p[k]) next[j]=k; else next[j]=next[k]; }else { k=next[k]; } } for(i=0;i<j;i++) print... 阅读全文
posted @ 2012-04-04 11:20 shijiwomen 阅读(165) 评论(0) 推荐(0) 编辑