1. 程式人生 > >2018年西電ACM網路賽

2018年西電ACM網路賽

地址連結

A

遞推sum[i] = sum[i - 1] + i - 1

B

最大公約數

C

貪心。先快排,前n / 2個數沒有用,將中位數及其之後的數放入小頂堆中。每次取出堆頂元素,糖的數量+1或加到比下一個數大1,再入堆。最後的堆頂就是答案。
STL中的堆可能會超時。

D

找規律

E

搜尋或者動態規劃
動態規劃程式碼:

int dp[110][110];//小杰、小國
int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        memset(dp,0x3F,sizeof
(dp));//inf int n; cin >> n; dp[1][1] = 0; for(int i = 1; i <= n; ++i) { for(int j = 1; j <= n; ++j) { if(j - i >= 1)//第一種轉移 dp[i][j] = min(dp[i][j],dp[i][j - i] + 1); //if(i * 2 == j)//錯誤
//dp[i][j] = min(dp[i][j],dp[i][i / 2] + 1);//錯誤 if(i * 2 == j) for(int k = 1; k <= n; ++k)//第二種轉移 dp[i][j] = min(dp[i][j],dp[k][j / 2] + 1); } } int min_dp = inf; for(int i = 1; i <= n; ++i) min_dp = min(min_dp,dp[i][n]); cout
<< min_dp << endl; } return 0; }

F

待補

G

廣搜+康拓展開

H

01分數規劃(待補)或利用計算幾何中的結論:
①求最大斜率:將x座標排序,求x方向相鄰兩點的斜率,取最大值
②求最小斜率:將y座標排序,求y方向相鄰兩點的斜率,取最小值

I

待補

J

待補