37 混合牛奶

問題描述 :

牛奶包裝是一個如此低利潤的生意,所以儘可能低的控制初級產品(牛奶)的價格變得十分重要。請幫助快樂的牛奶製造者(Merry Milk Makers)以可能的最廉價的方式取得他們所需的牛奶。快樂的牛奶製造公司從一些農民那購買牛奶,每個農民賣給牛奶製造公司的價格不一定相同。而且,如一頭母牛一天只能生產一定量的牛奶,農民每一天只有一定量的牛奶可以賣。每天,快樂的牛奶製造者從每個農民那購買一定量的牛奶,少於或等於農民所能提供的最大值。給出快樂牛奶製造者的每日的牛奶需求,連同每個農民的可提供的牛奶量和每加侖的價格,請計算快樂的牛奶製造者所要付出錢的最小值。注意: 每天農民生產的牛奶的總數對快樂的牛奶製造者來說足夠的。

輸入說明 :

第 1 行:二個整數, N 和 M。

第一個數值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 一天能賣給快樂的牛奶製造者的牛奶數量。

輸出說明 :

單獨的一行包含單獨的一個整數,表示快樂的牛奶製造者拿到所需的牛奶所要的最小費用

輸入範例 :

100 5
5 20
9 40
3 10
8 80
6 30

輸出範例 :

630

c源碼:

#include<stdio.h>
int main()
{
	int i,j,N,M,n,m,a[2][5000],s,p,t;
	while(scanf("%d%d",&N,&M)!=EOF)
	{   memset(a,0,5000);
      
        for(i=0;i<M;i++)
	     scanf("%d%d",&a[0][i],&a[1][i]);
	  for(i=0;i<M;i++)
		  for(j=0;j<M-i-1;j++)
		     if(a[0][j]>a[0][j+1])
			 {
			    n=a[0][j];
				m=a[1][j];
				a[0][j]=a[0][j+1];
				a[1][j]=a[1][j+1];
				a[0][j+1]=n;
				a[1][j+1]=m;
			 }
    s=0;
	p=0;
	for(i=0;i<M;i++)
	{
	   if(s==N)
	       break;
	   if((s+a[1][i])<=N)
	   {
	    s=s+a[1][i];
		p=p+a[1][i]*a[0][i];
	   }
	   else
	   {
	   t=N-s;
	   s=N;
	   p=p+t*a[0][i];
	   }

	}
     printf("%d\n",p);
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章