(1)数据结构定义 double w[N]; //一维数组存储古董的重量 (2)按重量排序 sort(w, w+n); //按古董重量升序排序 (3)按照贪心策略找最优解 首先用变量 count 记录已经装载的古董个数, tmp 代表装载到船上的古董的重量,两个变 量都初始化为 0。然后按照重量从小到大排序,依次检查每个古董, tmp 加上该古董的重量, 如果小于等于载重量 c,则令 count++;否则,退出。————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <iostream> 6 #include <string> 7 #include <algorithm> 8 #include <queue> 9 #include <map> 10 #include <stack> 11 using namespace std; 12 #define PI acos(-1) 13 #define INF 1<<30 14 #define EPS 1e-6 15 #define SET(a,b) memset(a,b,sizeof(a)) 16 #define N 1000006 17 #define M 10010 18 19 double w[N];//古董的重量数组 20 int main() 21 { 22 23 freopen("input.txt","r",stdin); 24 freopen("output.txt", "w", stdout); 25 26 int n,c;//c为船只最大装载量 27 cin>>c>>n; 28 int i; 29 for(i=0;i<n;i++) 30 cin>>w[i]; 31 sort(w,w+n); 32 double temp=0.0;//记录装箱过程的货物重量 33 int count=0;//装载的数量 34 for(i=0;i<n;i++) 35 { 36 temp+=w[i]; 37 if(temp<=c) 38 count++; 39 else break;//超过最大装载量,则退出 40 } 41 cout<<count<<endl; 42 return 0; 43 } 44 45
原文地址:https://www.cnblogs.com/orange912/p/11521284.html
时间: 2024-10-12 20:41:01