題意:
有一張圖,
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...