zoukankan      html  css  js  c++  java
  • 妞妞打车之最多的硬币

    妞妞参加完Google Girl Hackathon之后,打车回到了牛家庄。

    妞妞需要支付给出租车司机车费s元。妞妞身上一共有n个硬币,第i个硬币价值为p[i]元。

    妞妞想选择尽量多的硬币,使其总价值足以支付s元车费(即大于等于s)。

    但是如果从妞妞支付的这些硬币中移除一个或者多个硬币,剩下的硬币总价值还是足以支付车费的话,出租车司机是不会接受的。例如: 妞妞使用价值为2,5,7的硬币去支付s=11的车费,出租车司机是不会接受的,因为价值为2这个硬币是可以移除的。

    妞妞希望能选取最大数量的硬币,使其总价值足以支付车费并且出租车司机能接受。

    妞妞希望你能帮她计算最多可以支付多少个硬币。

    输入描述:
    输入包括两行, 第一行包括两个正整数n和s(1 <= n <= 10, 1 <= s <= 1000), 表示妞妞的硬币个数和需要支付的车费。
    第二行包括n个正整数p[i] (1 <= p[i] <= 100),表示第i个硬币的价值。
    保证妞妞的n个硬币价值总和是大于等于s。



    输出描述:
    输出一个整数, 表示妞妞最多可以支付的硬币个数。
    输入例子1:
    5 9
    4 1 3 5 4
    输出例子1:
    3
     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <algorithm>
     4 using namespace std;
     5 int main() {
     6     int n, s;
     7     while(cin>>n>>s) {
     8         int a[11];
     9         for(int i=0; i<n; i++) {
    10             cin>>a[i];
    11         }
    12         sort(a,a+n);
    13         int sum = 0;
    14         int cnt = 0;
    15         int b[11];
    16         for(int i=0; i<n; i++){
    17             sum = sum + a[i];
    18             b[i] = sum;
    19             if(sum >= s) {
    20                 cnt = i;
    21                 break;
    22             }
    23         }
    24         if(cnt >= 2) {
    25             if(b[cnt-2] + a[cnt] >= s) {
    26                 cnt = cnt - 1;
    27             }
    28         }
    29         cout << cnt+1 <<endl;
    30     }
    31     return 0;
    32 }

    因为n很小,强行暴力解。

  • 相关阅读:
    运行客户端程序报读取配置文件出错的解决方案
    速达软件二次开发-销售开单结算单位和账期报表需求
    速达软件开发版客户端启用流程
    vue 从后台获取数据并渲染到页面
    postgreSQL更改表的数据类型
    mybatis-plus实现多表联查
    mybatis学习笔记(四)
    mybatis学习笔记(三)
    mybatis学习笔记(二)
    mybatis学习笔记(一)
  • 原文地址:https://www.cnblogs.com/zou20134585/p/8617573.html
Copyright © 2011-2022 走看看