摘要:
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] ! 阅读全文
摘要:
做的第一个字典树,非常直观第一类是求前缀有多少个,第二类是求前缀是否在一串字符中出现主要是字典树的构造,使用了一个嵌套的结构体,使用了指针,非常方便也非常巧妙,还有就是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 阅读全文
摘要:
其中巧妙的运用了优先队列,将哈夫曼树的精髓给表达了出来需要注意的是其中的优先队列的定义,一定要有自定义比较#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 阅读全文
摘要:
注意问题的转换,有环,无序,有序,还有他们的包含分界点其中将字母装换成数字节点很妙#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 阅读全文
摘要:
就是不断选择最小的 不断更新最短距离,本题要注重问题的转换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; 阅读全文
摘要:
注意平角,钝角的判定,其中主要是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 阅读全文