CodeForces 913C 派對檸檬水

2021-09-26 07:24:59 字數 1225 閱讀 4814

input

4 12

20 30 70 90

output

150input

4 310000 1000 100 10

output

10input

4 310 100 1000 10000

output

30input

5 787787787

123456789 234567890 345678901 456789012 987654321

output

44981600785557577

題目大意:你需要從n種酒中買到總和大於等於l毫公升的酒,每種酒的數量是無限的,第i種酒有2 ^(i-1)毫公升,問最少花費。

貪心,雖然大多都能看出來是貪心題,但能不能做出來真的是碰運氣(可以忽略不計)。看了大佬的題解後的一些領悟。

解題思路:會有兩種狀態:

1.全買最便宜(每ml酒對應**最低)的那種酒

2.盡量買最便宜的酒,剩餘的買其他酒

如果最便宜的那種酒的容積沒有超過l,那我們至少會買一瓶,如果最便宜的那種酒容積的x倍沒有超過l,那我們至少會買x瓶,但全買最便宜的酒所花的錢不一定是最少的,我們可以盡量買最便宜的酒,剩餘的買其他酒,以此類推。(可能還是沒說明白),看**然後與第乙個樣例進行比對應該就差不多了。

然後兩種情況進行對比。

code:

#include#include#includeusing namespace std;

typedef long long ll;

const int n = 350;

int c[n];

struct node ;

node tt[n];

bool cmp(node a,node b)

sort(tt+1,tt+n+1,cmp);

ll res1=0,res2=0;

ll ans=0x3f3f3f3f3f3f3f3f;//初始化為無限大

while(l>0)

}// cout

cout

}

Codeforces 587C 樹上倍增

題意 求樹上兩點路徑中的前 a 10 小的點權值。思路 類似lca倍增演算法來儲存 i 2 j 路上的 前 10 小個 的點權值。然後要寫乙個權值合併 具體求 u v 的話,就是先分別計算 和 減1是lca會重疊 然後再合併,輸出答案。include include include include ...

Codeforces 976C 題解報告

對資料進行排序 1 按左邊的數從小到大排 2 若左邊的數相等,則按右邊的數從大到小排。排序之後,若乙個數的右邊的數小於等於上乙個數的右邊的數,則這兩個數必然符合題意。比如2 13 2 12 1 11排序之後,變為 1 11 2 13 2 12因為12 13,則有 2,12 被包含在它的上乙個數 2,...

CodeForces 948C 解題報告

題目鏈結 這道題看出來了是一道stl題,本來一開始用佇列去做,結果tle,在這裡先給出tle include using namespace std typedef long long ll const int maxn 1e5 10 int n,v maxn t maxn int main els...