Strategic gameTime Limit:2000MS Memory Limit:65536KTotal Submit:33 Accepted:15Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast enough and then he is very sad. Now he has the following problem. He must defend a medieval city, th Read More
View Code #include<stdio.h>#include<string.h>#define max(a,b)(a>b?a:b)int dp[1<<10+5][11];int len[11][11];int n;char str[11][11];int main(){ int n,i,j,k,x,count; int len1,len2,max; while(scanf("%d",&n),n) { memset(len,0,sizeof(len)); for(i=0;i<n;i++) scanf(" Read More
#include<stdio.h>#include<string.h>int a[10001];bool dp[10001][101];int n,m;int get_val(){ int ret(0); char c; while((c=getchar())==' '||c=='\n'||c=='\r'); ret=c-'0'; while((c=getchar())!=' '&&c!='\n'&&c!='\r') ret=r Read More
霍夫曼树的具体证明在离散数学书上有,我总结大意如下:我们平常查询单词的时候,总会有一些词查询的频率高,一些词查询的频率低,如果建立一棵树来查询,应该使那些经常查询的码(信息经过无损压缩后)的深度尽量小,这样,既省时间,又省空间。同样的前缀码会有不同的树权,树权最小的树就称为最优树,所以,对于英文字母的最佳编码问题就是求最优树 的问题。霍夫曼树每次贪心取最小的两片叶子,让他们成为兄弟,并成一棵树,权值相加并成新的一个节点,最后所有的节点合成一棵树,即为最优树。以一道题目为例:EntropyTime Limit:1000MS Memory Limit:65536KTotal Submit:23 A Read More
今天做了经典的食物链,在总结网上其它做法后,小结如下:题意:一共就三种动物,如果A吃B,B吃C==》C吃A; A吃B,A吃C==》B、C为同类A被B吃,A被C吃==》B、C为同类用并查集来做:两种动物之间的关系通过于根节点的相对关系得出,所以关键是路径压缩与合并两个集合时的动物与根节点相对关系的变化,其实也可认为是一个问题,因为路径压缩中的变化其实是合并集合产生的子问题。用delta【i】来表示i和i的父节点的关系,rank[i]=0/1/2分别表示 i 与父亲是同类、被父亲吃、吃父亲。先讲合并操作:设tx为x的父亲,ty是y的父亲,所以delta[x]表示x和tx的关系,delta[y]表示 Read More