天梯賽的一點小準備

2021-09-13 03:20:57 字數 3855 閱讀 4291

由於天梯賽不能帶模板,對於我這種模板嚴重依賴患者是很難受的,又因為去年打那麼菜,今年題目不是太難的話怎麼著也得上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...