牛奶包裝Mixing Milk
阿新 • • 發佈:2018-12-09
題目描述
牛奶包裝是一個如此低利潤的生意,所以儘可能低的控制初級產品(牛奶)的價格變的十分重要。 請幫助快樂的牛奶製造者(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
#include<iostream> #include<map> using namespace std; int main() { int n,m,s=0,i,x,y,s1=0,f=0,t=0; multimap<int,int> map1; multimap<int,int>::iterator it; scanf("%d%d",&n,&m); if(0<=n&&n<=2000000||0<=m&&m<=5000) f=1; for(i=0;i<m;i++) { cin>>x>>y; if(0<=x && x<=1000 || 0<=y && y<=2000000) t=1; map1.insert(pair<int,int>(x,y)); } if(f==0||t==0) printf("0\n"); else { for(it=map1.begin();it!=map1.end();it++) { s1+=(*it).second; s+=((*it).first)*((*it).second); if(s1>=n) break; } s1=s1-n; s=s-((*it).first)*s1; if(0<=s&&s<=2000000||0<=s&&s<=5000) printf("%d\n",s); else printf("%d\n",0); } } #include<stdio.h> int main(){ int n,m,a[5002][2],i,s1=0,j,p,t,s2=0,t1; scanf("%d%d",&n,&m); for(i=0;i<m;i++){ scanf("%d%d",&a[i][0],&a[i][1]); } for(i=0;i<m-1;i++){ for(j=i+1;j<m;j++) if(a[i][0]>a[j][0]){ t=a[j][0];t1=a[j][1]; a[j][0]=a[i][0]; a[j][1]=a[i][1]; a[i][0]=t; a[i][1]=t1; } } for(i=0;i<m;i++){ printf("%d %d\n",a[i][0],a[i][1]); } for(i=0;i<m;i++){ s1+=a[i][1];s2+=a[i][0]*a[i][1]; if(s1>=n){ break; } } printf("%d %d %d\n",s2,a[i][0],s1); printf("%d\n",s2-(a[i][0]*(s1-n))); }