zoukankan      html  css  js  c++  java
  • 独木舟问题

    n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?

    输入

    第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重。
    接下来n行,每行一个正整数,表示每个人的体重。体重不超过1000000000,并且每个人的体重不超过m。
    输出
     
    一行一个整数表示最少需要的独木舟数。
     
    输入示例

    3 6
    1
    2
    3

    输出示例

    2

     贪心思想:就是判断最重的那个人能不能和最轻的那个人同一条船,如果不能,则最重的人一定是一个人一条船

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 typedef long long ll;
     5 
     6 ll a[10005];
     7 int main(){
     8     ll n, m;
     9     cin>>n>>m;
    10     for(int i=0; i<n; i++){
    11         cin>>a[i];
    12     }
    13     sort(a, a+n);
    14     ll k=0;
    15     for(int i=n-1; i>=0; i--){
    16         int s=0;
    17         if(a[i]==0){
    18             break;      //如果搜到了a[i]=0的点,说明分配完毕,结束循环
    19         }
    20         while(a[s]==0){
    21             s++;
    22         }
    23         if((a[s]+a[i])>m){  //具体实现细节,从最重的人开始枚举,如果最轻的人能和最重的人坐一条船,就把最轻的人弄出去,设a[i]=0
    24             a[i]=0;
    25             k++;
    26         }else{
    27             a[i]=a[s]=0;
    28             k++;
    29         }
    30     }
    31     cout << k << endl;
    32     return 0;
    33 }
  • 相关阅读:
    ZJU_1145 OR POJ_1100 Dreisam Equations
    数据结构基础之队列
    The New Villa
    Mission Impossible 6
    数据结构基础之栈
    POJ_1185_炮兵阵地 dp+状态压缩
    (转载)Dig命令的用法
    (转载)服务发现系统etcd介绍
    golang 导入包
    1.4方程求根之弦截法
  • 原文地址:https://www.cnblogs.com/ledoc/p/6559747.html
Copyright © 2011-2022 走看看