n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?
分析:贪心算法,抽象化最优解,找出策略。
1 #include <stdio.h> 2 #define N 10000 3 #include "Array.h" 4 void sort(int a[],int n); 5 int getDugout(int a[],int n,int m); 6 int main() 7 { 8 int a[N];//存放人的体重 9 int n,i,m; 10 int k; 11 scanf("%d %d",&n,&m); 12 for(i=0;i<n;i++) 13 scanf("%d",&a[i]); 14 //print(a,n); 15 sort(a,n);//print(a,n); 16 k=getDugout(a,n,m); 17 printf("%d",k); 18 return 0; 19 } 20 void sort(int a[],int n) 21 { 22 int i,j,minIndex,temp; 23 for(i=0;i<n-1;i++) 24 { 25 minIndex=i; 26 for(j=i+1;j<n;j++) 27 if(a[minIndex]>a[j]) 28 minIndex=j; 29 if(minIndex!=i) 30 { 31 temp=a[minIndex]; 32 a[minIndex]=a[i]; 33 a[i]=temp; 34 } 35 } 36 } 37 int getDugout(int a[],int n,int m) 38 { 39 int i=0,j=n-1; 40 int k=0; 41 while(i<j||i==j) 42 { 43 //if(i==j&&a[i]<m||a[i]==m) 44 //k++; 45 if(a[i]+a[j]>m) 46 { 47 k++; 48 j--; 49 } 50 else 51 { 52 k++; 53 i++; 54 j--; 55 } 56 } 57 return k; 58 }
时间: 2024-10-12 01:43:44