Wannafly挑戰賽15 A 最小化價格(貪心)

2021-08-19 21:45:56 字數 1356 閱讀 1954

題目鏈結

time limit:1000 ms memory limit:65536 kb

現有n組人,m個地點,給出每組人的人數,每個地點可容納的最大人數和選擇的**

要求一種方式,使得每組人都到乙個各不相同的地點,最小化選擇的**

每個隊伍的人都要在同乙個地方每個地方只能有乙個隊伍

第一行n,m

第二行n個數,表示每組的人數

接下來m行,每行兩個數,表示可容納的最大人數和選擇的**

輸出最小化選擇的**,無解輸出-1

3 4

2 3 4

1 22 3

3 44 5

12
所有資料小於1e5

將地點按照容納人數由大到小排序,隊伍則按照人數從大到小排序。遍歷地點,將當前地點的**插入multiset,如果當前地點的人數不足以容納該隊伍,則在multiset中最小的(地點對應的)**刪除,如果出現multiset中沒有元素的情況,則說明前面沒有剩餘可以容納這麼多人數的地點了,輸出-1shuchu

因為對multiset的操作不熟悉,導致wa一次

s.erase(s.begin())刪除第乙個元素

s.erase(*s.begin())刪除所有與第乙個元素相等的元素

#include 

using

namespace

std;

const

int maxn=1e5+5;

int num[maxn];

struct node

;bool cmp(node a,node b)

node a[maxn];

multiset

s;int main(int argc, char

const *argv)

sort(num,num+n,greater());

for(int i=0;icin>>a[i].num>>a[i].price;

}sort(a,a+m,cmp);

a[m].num=0;

a[m].price=0;

long

long ans=0;

int p=0;

for(int i=0;i<=m;i++)

ans+=(long

long)*s.begin();

s.erase(s.begin());

p++;

}s.insert(a[i].price);

if(p==n)

}cout

<<-1

0;}

Wannafly挑戰賽15 A 最小化價格

現有n組人,m個地點,給出每組人的人數,每個地點可容納的最大人數和選擇的 要求一種方式,使得每組人都到乙個各不相同的地點,最小化選擇的 每個隊伍的人都要在同乙個地方每個地方只能有乙個隊伍 第一行n,m 第二行n個數,表示每組的人數 接下來m行,每行兩個數,表示可容納的最大人數和選擇的 輸出最小化選擇...

Wannafly挑戰賽15 A最小化價格

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 現有n組人,m個地點,給出每組人的人數,每個地點可容納的最大人數和選擇的 要求一種方式,使得每組人都到乙個各不相同的地點,最小化選擇的 每個隊伍的人都要在同乙個地方每個...

Wannafly挑戰賽15 B 車輛安排

鏈結 題目描述 有n個隊伍,每個隊伍的人數小於等於5,每輛車最多坐5個人,要求乙個隊伍的人都在一輛車上,求最少的車數 輸入描述 第一行n 第二行n個數,表示每個隊伍的人數 輸出描述 輸出最少車數 示例1 輸入3 3 4 5 輸出 備註 n 1e5 每個數小於等於5 貪心 4個人的只能和1個人的拼車 ...