topcoder SRM 642 解題報告

2021-08-22 14:52:39 字數 1222 閱讀 7579

題意:

有一張圖,

n n

個節點(n

≤50)' role="presentation" style="position: relative;">(n≤

50)(n

≤50),每條邊有乙個高度值,the king要從某條路走過必須滿足他的shoes高度小於等於這條路的高度值。他現在有一些金幣,把一條邊的高度約束上調

k k

個單位需要k2

' role="presentation" style="position: relative;">k2k

2的金幣,每條邊只能上調一次。現在他要從

0 0

走到n−

1' role="presentation" style="position: relative;">n−1

n−1,求他能穿的最高shoes高度。

思路:看起來像乙個最短路吧,但是沒有確切的邊權,很難轉移狀態。

於是我想到先二分鞋子高度,在check的時候跑一遍最短路,這時邊權是確定的,就很容易做最短路了。

1000pts裡面比較基礎的題。

貼**:

#define ll long long

using

namespace

std;

const ll n = 50;

ll n, m, c, maxht;

vector

to[n];

vector

ht[n];

ll l, r, mid, ans;

ll dis[n];

bool inq[n];

queue

q;bool spfa(ll std_ht, ll max_cost)}}

}if (dis[n-1] == -1) return

0; else

return (dis[n-1] <= max_cost);

}class tallshoes ;

int tallshoes::maxheight(int n, vector

x, vector

y, vector

height, long

long b)

//main

l = 0; r = maxht+sqrt(c);

while (l <= r)

return ans;

}

topcoder SRM 641 解題報告

題意 給乙個長度2n的序列,每次洗牌可以把前n個數任意排列 記為a 後n個數任意排列 記為b 然後把兩個序列交叉,即把序列排成a1,b1,a2,b2,a3,b3 an,bn。現在初始序列是1,2,3,4 2n,給出乙個目標序列,求能否用兩次洗牌達到目標序列。思路 大大大水題!3行 因為前n個數和後n...

USACO Hamming Codes 解題報告

資料小,暴力搜尋可以搞定。但是推薦使用dfs,每個節點 數 有取與不取兩個分支。注意 0是必須出現的。證明如下 最終得到的結果序列中,0是必須出現的,證明如下 如果存在另乙個滿足要求的結果序列s 其最小值為a1 n 0,那麼序列s s n 是滿足條件的最小解,且首元素為0 id xpli1 prog...

USACO Closed Fences 解題報告

幾何題看著就很有畏懼感。這裡用的是最 的演算法,時間複雜度應該在n 2。還沒看別人的解題報告,不過我猜nlogn的解法是有的。比如判斷乙個fence是不是valid的時候,這裡將所有的線段兩兩比較,看是否相交。但是有個叫line sweep的演算法,可以在nlogn的時間複雜度內完成。既然accep...