洛谷 P1208混合牛奶 題解

張其勳發表於2023-01-26

題目傳送門

一道貪心演算法不是很明顯的題目,其實一般的遞推也可以做。(邏輯較為嚴密即可)


 

大體思路:肯定優先購買單價最低的奶農的牛奶,那麼就需要先根據牛奶單價進行排序,這裡用結構體會更好一點。之後在從前往後一個一個列舉,直至購買的牛奶數量達到要求即可。

話不多說,上程式碼:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 long long n,m,sum;
 4 struct farm{
 5     int price,weight;
 6 }a[100001];//結構體,price表示單價,weight表示可出售的質量 
 7 bool cmp(farm x,farm y){
 8     return x.price<y.price;
 9 }//根據牛奶的單價進行排序 
10 int main(){
11     cin>>n>>m;
12     for(int i=1;i<=m;i++){
13         cin>>a[i].price>>a[i].weight;
14     }//輸入 
15     sort(a+1,a+m+1,cmp);//根據上面的要求進行排序 
16     for(int i=1;i<=m;i++){
17         if(a[i].weight>n){//可出售質量超出剩餘需求 
18             sum+=n*a[i].price;//總和+=剩餘需求*單價 
19             break;//結束迴圈 
20         }
21         n-=a[i].weight;//剩餘需求減去牛奶數量 
22         sum+=a[i].price*a[i].weight; //總和+=單價*所有的質量 
23     }
24     printf("%d",sum);
25     return 0;
26 }

 其他洛谷題解可到個人主頁來看。

相關文章