top1编程
← 返回题目
题解

独木舟

1 条题解

  • 0
    @ 2026-7-28 23:26:29
    #include <bits/stdc++.h>  
    using namespace std;  
    
    int w, n; // 最大承重和物品数量  
    int a[30005]; // 存储物品重量的数组  
    int s = 0; // 船只数量计数器  
    
    // 自定义比较函数,用于降序排序  
    bool cmp(int a, int b) {  
    	return a > b; 
    }  
    
    int main() {  
    	cin >> w >> n; // 输入最大承重和物品数量  
    	for(int i = 1; i <= n; i++) {  
    		cin >> a[i]; // 输入每个物品的重量  
    	}  
    	// 使用自定义比较函数进行降序排序  
    	sort(a + 1, a + n + 1, cmp);  
    	int L = 1, R = n; // 初始化两个指针  
    	while(L <= R) { // 当还有物品未处理时  
    		// 如果最重和最轻的物品可以配对  
    		if(a[L] + a[R] <= w) {  
    			L++; // 移动左指针,表示最重的物品已配对  
    			R--; // 移动右指针,表示最轻的物品已配对  
    		} else {  
    			L++; // 只移动左指针,表示最重的物品单独出船  
    		}  
    		s++; // 每次循环代表一艘船  
    	}  
    	
    	cout << s << endl; // 输出所需的船只数量  
    	
    	return 0;  
    }
    
    • 1