1. 程式人生 > >Luogu P1208 [USACO1.3]混合牛奶 Mixing Milk(貪心)

Luogu P1208 [USACO1.3]混合牛奶 Mixing Milk(貪心)

總數 ini namespace std 輸入輸出 描述 輸入 long 固定

P1208 [USACO1.3]混合牛奶 Mixing Milk

題目描述

由於乳制品產業利潤很低,所以降低原材料(牛奶)價格就變得十分重要。幫助Marry乳業找到最優的牛奶采購方案。

Marry乳業從一些奶農手中采購牛奶,並且每一位奶農為乳制品加工企業提供的價格是不同的。此外,就像每頭奶牛每天只能擠出固定數量的奶,每位奶農每天能提供的牛奶數量是一定的。每天Marry乳業可以從奶農手中采購到小於或者等於奶農最大產量的整數數量的牛奶。

給出Marry乳業每天對牛奶的需求量,還有每位奶農提供的牛奶單價和產量。計算采購足夠數量的牛奶所需的最小花費。

註:每天所有奶農的總產量大於Marry乳業的需求量。

輸入輸出格式

輸入格式:

第 1 行共二個數值:N,(0<=N<=2,000,000)是需要牛奶的總數;M,(0<= M<=5,000)是提供牛奶的農民個數。

第 2 到 M+1 行:每行二個整數:Pi 和 Ai。

Pi(0<= Pi<=1,000) 是農民 i 的牛奶的單價。

Ai(0 <= Ai <= 2,000,000)是農民 i 一天能賣給Marry的牛奶制造公司的牛奶數量。

輸出格式:

單獨的一行包含單獨的一個整數,表示Marry的牛奶制造公司拿到所需的牛奶所要的最小費用。

輸入輸出樣例

輸入樣例#1:
100 5
5 20
9 40
3 10
8 80
6 30
輸出樣例#1:
630

說明

題目翻譯來自NOCOW。

USACO Training Section 1.3

  水題,每次購買價錢最低的就OK了。

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 struct fam
 6 {
 7     int p, a;
 8 }famer[5005];
 9 
10 int cmp(fam a, fam b)
11 {
12     return a.p < b.p;
13 }
14 
15 int main()
16 {
17     int
m, n; 18 long long ans = 0; 19 scanf("%d%d", &n, &m); 20 for(int i=1; i<=m; i++) 21 scanf("%d%d", &famer[i].p, &famer[i].a); 22 sort(famer+1, famer+1+m, cmp); 23 for(int i=1; i<=m && n>0; i++) 24 { 25 if(n >= famer[i].a) 26 { 27 ans += famer[i].a * famer[i].p; 28 n -= famer[i].a; 29 } 30 else 31 { 32 ans += n * famer[i].p; 33 n = 0; 34 } 35 } 36 37 printf("%lld", ans); 38 return 0; 39 }

Luogu P1208 [USACO1.3]混合牛奶 Mixing Milk(貪心)