摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2063二分图最大匹配,匈牙利算法(dfs+邻接矩阵)月老要是用这算法。。。“一入此门深似海,从此节操是路人”,其ACM之谓也? 1 #include <stdio.h> 2 #include <string.h> 3 #define N 521 4 5 int n, m, k; 6 int map[N][N], girl[N], flag[N]; 7 8 int find(int x) 9 {10 int i;11 for(i=1; i<=m; i++)12 {13 ... 阅读全文
摘要:
http://poj.org/problem?id=1218数论很有意思的题目描述,在纸上画1~10的例子,能想到一个模型:找到编号(1,2,3...n-1,n)的因子个数是奇数的囚犯,就是最后逃跑的。容易发现:“完全平方数的因子个数为奇数”可以直觉上"证明"一下: 完全平方数 <---> 因子个数为奇数对于任意整数n,都可以分解为2个整数a,b的乘积,a * b == n如果a为n的一个因子,那么 n/a 也一定为n的一个因子,可以理解为n的因子总是成对出现,所以因子总数经常是偶数,除非存在一个因子a,使n/a==a,这样因子总数就是奇数了,显然此时n为完全平 阅读全文
摘要:
http://poj.org/problem?id=1631DP最长上升子序列最长上升子序列,因为n很大(n<40000),我开始写的O(n^2)的算法超时了。。。学了一下O(n*logn)的方法,dp[i]表示当前状态下,所有长度为i的子序列中,末尾元素最小的那个子序列,的末尾元素值。例如序列:a[6]:(1,3,5,4,6,2)考虑到前6个元素的时候长度为3的子序列有:(1,3,5) (1,3,4) (1,3,6) (3,5,6) (3,4,6) 那么dp[3] = 4;长度为4的子序列有:(1,3,5,6) (1,3,4,6) 那么dp[4] = 6;开始时dp数组为空,依次遍历原 阅读全文
摘要:
http://poj.org/problem?id=1659贪心自己YY了一个贪心,AC了。。。后来才知道,竟然还是个定理。。。“Havel-Hakimi定理” 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 struct A 6 { 7 int n, x; 8 }a[12]; 9 10 int map[12][12];11 12 int cmp(const void *a1, const void *b1)13 {14 return (*(struct A *)b1) 阅读全文
摘要:
http://poj.org/problem?id=1363数据结构 栈用2个栈模拟,复杂度O(n) (每个元素最多进栈(s2)一次,出栈一次)s1弹出的元素压入s2,s2再弹出来一定要按照顺序n,n-1,n-2...4,3,2,1想办法让s2按此顺序弹出,如果不能,则输出"No" 1 #include <stdio.h> 2 #include <stack> 3 4 using namespace std; 5 6 stack<int> s1, s2; 7 8 void clear() 9 {10 while(!s1.empty())1 阅读全文