C/C++ 演算法分析與設計:貪心(搬運工)
阿新 • • 發佈:2018-12-14
題目描述
搬運工的工作非常辛苦,不僅是因為要費體力,而且幹活要有技巧,不能總是用蠻力。假設你是一名搬運工,給定一個最大載重量為M公斤的卡車和N種食品,有食鹽,白糖,大米等。已知第 i 種食品的擁有Wi 公斤,其商品價值為Vi元/公斤,程式設計確定一個裝貨方案,使得裝入卡車中的所有物品總價值最大。
輸入
輸入資料有多組,每組第1行有2個正整數,分別為M和N(1 <= M,N <=100),接下來有N行。這N行裡每行2個數,分別為正整數Wi和正實數Vi(1.0 <= Wi,Vi <=100.0)代表每種食品的重量和(價值/公斤)。
輸出
對於每組資料輸出卡車能裝物品的最大值(保留2位小數)。
樣例輸入
10 3 5 2 4 3 3 5
樣例輸出
33.00
#include<stdio.h> int main() { int n,m,i,j,p,s=0; double a[10][2],sum=0,t,t2; scanf("%d%d",&n,&m); for(i=0;i<m;i++) { scanf("%lf%lf",&a[i][0],&a[i][1]); } for(i=0;i<m;i++) { p=i; for(j=i+1;j<m;j++) if(a[j][1]>a[p][1]) p=j; if(p!=i){ t=a[i][0];a[i][0]=a[p][0];a[p][0]=t; t2=a[i][1];a[i][1]=a[p][1];a[p][1]=t2; } if(s+a[i][0]>=n) {sum+=((n-s)*a[i][1]);printf("%.2lf\n",sum);break;} else {s+=a[i][0];sum+=a[i][0]*a[i][1];} } }