上一页 1 ··· 4 5 6 7 8 9 10 11 下一页
摘要: http://poj.org/problem?id=251373348K 1438MS C++ 1614B解题思路:欧拉路的应用 要点 :1、判断连通性2、欧拉路的判断(所有的节点的度为偶数或者只有两个奇数节点)连通性的判断: 并查集-----由于本题的节点是字符串,,并不好处理,所以用Trie树来获得id。。然后 find 、unin 和普通并查集一样,。连通性判断:并查集的祖先节点 ,,只有一个,若有多个即 不是连通图,也就不是欧拉路。。 1 #include 2 #include 3 #include 4 #define maxn 500005 5 using nam... 阅读全文
posted @ 2013-08-06 15:46 夜晓楼 阅读(264) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2001大意: 求一字符串的最短前缀解题思路:trie树的简单应用。。直接模版即可 1 #include 2 #include 3 using namespace std; 4 struct node{ 5 int cnt; 6 struct node *next[26]; 7 node(){//结构体中可以带函数,进行初始化 8 cnt =0; 9 memset(next,0,sizeof(next));10 }11 };12 char str[1003][30];13 no... 阅读全文
posted @ 2013-08-06 11:26 夜晓楼 阅读(219) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1080知识点 :最长公共子序列要点:转移方程 f[i][j] = max{ f[i-i][j]+score[s1[i-1]]['-'], f[i][j-1]+score['-'][s2[j-1]], f[i-1][j-1]+score[s1[i-1]][s2[j-1]]}#include using namespace std;int score['T'+1]['T'+1];int dp[1000][1000];char s1[200],s2[200];void init(){ 阅读全文
posted @ 2013-08-04 14:35 夜晓楼 阅读(241) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1703rank 用于记录祖先的等级opp 用于记录敌人。。 1 #include 2 #include 3 using namespace std; 4 int f[100005]; 5 int rank[100005],opp[100005]; 6 char str[3]; 7 void init(int n){ 8 for(int i=1;irank[fb])26 f[fb] = fa;27 else{28 f[fa] = f[fb];29 if(rank[fa]==ra... 阅读全文
posted @ 2013-08-04 14:16 夜晓楼 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 要点:哈夫曼编码 求最后编码完成之后编码的长度解决方法: 即为所有度为2的节点的权重的和。。避免了一次次的相加 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 int main(){ 9 char str[1000];10 while(cin>>str){11 if(!strcmp(str,"END"))12 break;13 int num[27];14 memset(n... 阅读全文
posted @ 2013-08-04 14:00 夜晓楼 阅读(277) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1384完全背包 要点: 要求的是最小为多少,,所以需要将f[] 初始化为最大。其他的于完全背包一样可以 1 #include 2 #define maxn 5000000 3 using namespace std; 4 int fa[10005]; 5 int w[10005],v[10005]; 6 int main() 7 { 8 int t; 9 cin>>t;10 while(t--){11 int e,f;12 cin>>e>>f;13 int ww = ... 阅读全文
posted @ 2013-08-04 11:46 夜晓楼 阅读(224) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1276解题要点:用完全背包来模拟的解题,只不过加了限制条件used[]。。。其他的就一样了。。注意: cash 和n 为0 的情况 1 #include 2 #include 3 using namespace std; 4 int cash,n; 5 int amount[20],w[20]; 6 int f[100006]; 7 int used[100006]; 8 int maxm(){ 9 if(cash==0||n==0){10 return 0;11 }12 for(int i=1;i... 阅读全文
posted @ 2013-08-04 11:38 夜晓楼 阅读(240) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2356方法一: 鸽巢原理解题思路: n个数,,依次求其s[0],s[1],s[2],s[3]。。。。。s[n] 然后对 n取模,,必然会得到n+1个结果,,这n+1个结果放到0---n-1,这n个盒子中,必然会有重复的,所以这两个重复的之间,必然就是所求的结果。 1 #include 2 #include 3 using namespace std; 4 int n; 5 int sum [10002]; 6 int s[10002]; 7 int select[10002]; 8 int main() 9 {10 cin>>n 阅读全文
posted @ 2013-08-04 11:29 夜晓楼 阅读(219) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1664解题思路:f(m,n) m个苹果放到n个盘子里1、当只有一个苹果或只有一个盘子时只有1中放法2、当盘子数大于苹果数时,最多为将m个苹果,在m的盘子中每个放一个 ,,即f(m,m)3、当苹果数大于等于盘子数时:(两种情况) 1、不允许有空闲时,即每个盘子中至少有一个。。为f(m-n,n); 2、允许有空闲时,即至少有一个盘子是空闲的。。即f(m,n-1); 1 #include 2 using namespace std; 3 int f(int m,int n){ 4 if(m==1||n==1||m==0)//m... 阅读全文
posted @ 2013-08-04 11:16 夜晓楼 阅读(238) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2992大意:求(n,k)的因子个数解题思路:(n,k) = n!/(k!(n-k)!)任意一个数都可以用其质因子来表示 eg: 26 = 2^1 * 13^1; 240 = 2^4 * 3 *5;即 x = p1^q1 * p2^2 *p3*q3 ....... 其因子的个数为(q1+1)*(q2+1)*(q3+1)。。。。所以把 n! , k!, (n-k)! 中的公共因子删去,就得到的 (n,k)的结果 1 #include 2 #include 3 using namespace std; 4 long long res[437][. 阅读全文
posted @ 2013-08-02 09:52 夜晓楼 阅读(200) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 下一页