976 AlvinZH想回家(揹包DP大作戰T)

2022-04-12 08:02:35 字數 1155 閱讀 2878

如果在第i小時有一些飛機延誤,那麼一架飛機的c值越大,這一小時產生的損失也越大。而使這一小時產生的損失盡可能的小並不會導致接下來時間產生的損失增大。因此應當每一小時都找出要飛的飛機中c值最大的飛走,即貪心思想

題目有要求,第k+i小時,應該從1~k+i架航班中未飛出的航班中選出ci最大的飛走.

由於需要將找出資料中的最大值、去掉資料中最大值,可以考慮使用優先佇列

貪心證明: 設序號為i的飛機起飛時間為di,則cost=∑(di-i)_ci=∑di_ci-∑i*ci. 顯然後一項為常數,而d(i)為[k+1,k+n]的乙個排列,所以只要使ci越大的i盡可能早起飛即可使得cost最小。

可以輸入完之後再處理,見參考**一。一般輸入一邊處理,見參考**二。思想相同,並無差別。

//

// created by alvinzh on 2017/11/6.

//#include #include using namespace std;

struct flight

}f[500005], t;

int n, k;

long long ans;

priority_queueq;

int main()

for(int i = 1; i <= k; i++)

q.push(f[i]);

for(int i = k+1; i <= k+n; i++)

printf("%lld\n", ans);

}}

//

// created by alvinzh on 2017/11/6.

//#include #include using namespace std;

struct flight

bool operator < (const flight& b) const

};int n, k, c;

long long ans;

flight f(0,0);

priority_queueq;

int main()

if(i >= k+1)//開始處理

}printf("%lld\n", ans);

}}

Codeforces 976C 題解報告

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

Codeforces 976E 題解報告

1 當把所有的倍數2 a都加到同一health上,health增加的最多 2 先計算每乙個creature的hp dmg,按該值對所有的creature排序 再求和,i include using namespace std const int n 200 1000 9 int hp n dmg n...

CF 976F 遞增容量最大流

給你乙個二分圖 要求你求出對於k 0 mindegree 每個點的度數至少為k所需要的最少邊數 並輸出方案 如果是單個詢問的話 直接跑乙個下界網路流即可 但是有多個詢問 重建圖強行跑不行 反過來考慮,變成至多能刪除多少邊則建邊 s,i,degree i mindegree i,t,degree i ...