由於天梯賽不能帶模板,對於我這種模板嚴重依賴患者是很難受的,又因為去年打那麼菜,今年題目不是太難的話怎麼著也得上200呀,所以來重新打一遍模板,交一下裸題驗證其正確性。
需要準備的也不是太多,主要是一些基本的圖論演算法以及dp。畢竟都是理解了的,應該不會耗時很久。
就按照白書上面的順序來敲吧。
一、01揹包
題目:bone collector
二維的:
int dp[maxn][maxn];
int w[maxn], v[maxn];
int main()
} printf("%d\n", dp[n][v]);
} return 0;
}
一維的:
int dp[maxn];
int w[maxn], v[maxn];
int main()
} printf("%d\n", dp[v]);
} return 0;
}
二、lcs問題
題目:common subsequence
char s[maxn], t[maxn];
int dp[maxn][maxn];
int main()
} printf("%d\n", dp[n][m]);
} return 0;
}
三、完全揹包問題
題目:piggy-bank
直接一維吧:
int w[505], v[505];
int dp[10005];
int main()
} if(dp[v] == inf) puts("this is impossible.");
else printf("the minimum amount of money in the piggy-bank is %d.\n", dp[v]);
} return 0;
}
四、多重部分和問題
題目:dividing
int a[10] = , m[10];
int dp[maxn];
int main()
if(sum & 1)
sum /= 2;
fill(dp, dp + sum + 1, -1);
dp[0] = 0;
rep(i, 1, 6)
else dp[j] = dp[j-a[i]] - 1;
}} if(dp[sum] >= 0) puts("can be divided.");
else puts("can't be divided.");
puts("");
} return 0;
}
五、lis問題
題目:longest ordered subsequence
int a[maxn];
int dp[maxn];
int main()
printf("%d\n", lower_bound(dp + 1, dp + n + 1, inf) - dp - 1);
return 0;
}
六、優先佇列的定義&過載
struct node
};priority_queueq;
七、並查集
題目:the suspects
int fa[maxn];
int n, m;
int find(int x)
void uni(int x, int y)
void init()
int main()
} int fa0 = find(0);
int cnt = 1;
rep(i, 1, n - 1)
printf("%d\n", cnt);
} return 0;
}
八、最短路問題
floyd:
問題:cow contest (求有向圖傳遞閉包)
bool vis[maxn][maxn];
int main()
rep(k, 1, n)
} }int cnt = 0;
rep(i, 1, n)
if(f) cnt++;
} printf("%d\n", cnt);
return 0;
}
bellman_ford:
題目:wormholes
struct edgee[maxn];
int d[maxn];
int n, m, m2;
bool bellman_frod(int s)
} }return false;
}int main()
rep(i, 2 * m + 1, 2 * m + m2)
puts(bellman_frod(1) ? "yes" : "no");
} return 0;
}
dijkstra:
題目:暢通工程續
樸素版:
vectorg[maxn];
bool vis[maxn];
int d[maxn];
int n, m;
void dij(int s)
if(v == -1) break;
vis[v] = 1;
int len = g[v].size();
rep(i, 0, len - 1) }}
int main()
int s, t; scanf("%d %d", &s, &t);
dij(s);
printf("%d\n", d[t] == inf ? -1 : d[t]);
} return 0;
}
堆優化:
struct edge
edge(int to, int cost)
};vectorg[maxn];
int d[maxn];
int n, m;
void dij(int s)
} }}int main()
int s, t; scanf("%d %d", &s, &t);
dij(s);
printf("%d\n", d[t] == inf ? -1 : d[t]);
} return 0;
}
九、mst
題目:networking
kruskal:
struct edge
};edge es[maxm];
int fa[maxn];
int n, m;
int find(int x)
void uni(int x, int y)
void init()
int solve()
} return res;
}int main()
printf("%d\n", solve());
} return 0;
}
Android setResult 的一點小問題
在android的activity中,我們經常使用startactivityforresult啟動另外乙個activity,例如從activity a啟動 activity b,那b何時呼叫setresult合適,能不能再finish 之後呼叫?在這裡做一下記錄。直接看下activity的原始碼se...
一點小感悟
今天去了華為的機試,說實話,題目不是很難,但是自己並沒有發揮的很好,只寫出來一題半,第一題非常簡單 兩個兩位數a,b,輸出乙個四位數,將a的十位和個位放到c的十位和百位上,b的十位和個位放到c的個位和千位上,直接轉化為字串拼接一下就行。第二題有點難度 給出1,3,9,27,81,這幾個數,輸入1 1...
一點小疑問
記得我第一次看nehe教程裡第9課的時候,就被他下面這段 弄暈了 glrotatef tilt,1.0f,0.0f,0.0f tilt the view using the value in tilt glrotatef star loop angle,0.0f,1.0f,0.0f rotate t...