- 博客(14)
- 资源 (5)
- 收藏
- 关注
原创 背包问题
来自著名的背包九讲,算是笔记吧。n件物品,背包体积V、质量U,物品体积a[i]、质量b[i]、价值c[i],求最大价值。1. 01背包一种物品只有一件,可选可不选f[i][v] = max(f[i-1][v], f[i-1][v-a[i]]+c[i])i 顺序,v 逆序,空间复杂度可以降低一维2. 完全背包每种物品无限多f[i][v] = max(f[i-1][v]
2015-10-31 11:21:02 451
原创 python语法
if x < 0: x = 0 print('Negative changed to zero') elif x == 0: print('Zero') elif x == 1: print('Single') else: print('More')for w in words: print(w, len(w))for i in range(5): print(i)break and contin
2015-10-29 16:18:25 522
原创 DP
状态,保存当前所有状态状态转移方程最优子结构,全局最优解包含局部最优解重叠子问题两种动机:利用递归的重叠子问题,进行记忆话求解,即先利用递归法解决问题,再利用重叠子问题转化成动态规划;把问题看作是多阶段决策过程。两种实现方式:递推(向前和向后)和记忆化搜索。如果需要记录选择、打印路径的话需要辅助数组。
2015-10-28 15:43:35 357
原创 最短路——Floyd
求每两点之间的最短路。还有个有意思的用处,判断每两点之间是否有通路,初始值设为0或者1,d[i][j] = d[i][j] || (d[i][k] & d[k][j]),有向图的传递闭包。for(int k = 0; k < n; ++k){ for(int i = 0; i < n; ++i){ for(int j = 0; j < n; ++j){ if(d[i][k] !=
2015-10-27 15:30:57 347
原创 最短路——SPFA
Bellman-Ford基础上的队列优化,效率比较高,可以检测负环。const int maxn = 110;const int max_int = ~(1<<31);const int min_int = (1<<31);bool inq[maxn];int cost[maxn][maxn], dist[maxn], cnt[maxn], q[maxn], front, rear;
2015-10-27 15:12:13 381
原创 栈和队列
数组模拟实现。模板不熟,改为模板更好一些。class stack {private: int maxsize, t; int *s;public: stack(int n) : maxsize(n), t(0){ s = new int[maxsize]; } virtual ~stack(){ delete []s; } void push(int v){ s[
2015-10-23 19:41:18 295
原创 最短路——Bellman-Ford
可以处理负边,负环。int dijkstra(int s){ for(int i = 0; i < n; ++i){ dist[i] = max_int; } for(int k = 1; k < n; ++k){ for(int i = 0; i < m; ++i){ int x = u[i], y = v[i]; if(dist[x] < max_int){
2015-10-21 10:46:06 479
原创 最短路——Dijkstra
Dijkstra算法,不能处理负边负环,不连通时返回-1。使用优先队列可以优化——spfa,下一篇会介绍。const int maxn = 110;const int max_int = ~(1<<31);const int min_int = (1<<31);bool vis[maxn];int cost[maxn][maxn], dist[maxn];//[0,max_in
2015-10-19 11:01:35 549
原创 哈希
哈希用来查找,哈希的冲突处理,结构类似于线性表,也可以用来存储图,稀疏图,允许重边。插入到头部,效率高一些,但是顺序相反了。const int maxn = 110;const int maxm = 10010;int head[maxn], next[maxm];void init(){ for(int i = 0; i < n; ++i){ head[i] = -1;
2015-10-17 15:59:17 413
原创 字典树
利用公共前缀减少查询时间,节省内存静态分配,动态分配malloc次数太多,效率不行const int maxc = 26;const int maxn = 1000010;typedef struct trie{ int v; struct trie *next[maxc];}trie;trie mem[maxn];int alloc;void init(trie *
2015-10-16 11:32:38 509
原创 并查集
const int maxn = 10010;int p[maxn];int find(int x){if(x != p[x]) p[x] = find(p[x]); return p[x];}int find(int x){return x == p[x] ? p[x] : p[x] = find(p[x]);}for(int i = 0; i < n; ++i){ p[i] =
2015-10-15 10:30:41 377
gtest-1.7.0
2014-08-19
ECQ-PS超级进程王 v4.rar
2009-05-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人