• 基本算法思维——拿最多物品


    问题:

    小赛特别爱购物,有一次他获得了在超市免费购物的机会,超市内有n件物品,第i(1<=i<=n)件物品的价值为ai,但是他能拿的物品的价值总和不能超过V。贪心的小易希望能拿尽量多数量的物品,那么请你帮他计算下他最多能拿到多少件物品?

    分析:

    将物品排序,每次只拿当前价值最低的,就可以拿到最多的物品。

    code:

     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class Main2 {
     5     public static  void main(String args[]){
     6         Scanner s = new Scanner(System.in);
     7 
     8         int n,v;
     9         while(s.hasNext()){
    10             n = s.nextInt();
    11             v = s.nextInt();
    12             int[] dp = new int[n];
    13             for(int i=0;i<n;i++){
    14                 dp[i] = s.nextInt();
    15             }
    16             //按升序排序
    17             Arrays.sort(dp);
    18             int sum=0;
    19             int i;
    20             for(i=0;i<n;i++){
    21                 if((sum+dp[i])<=v){
    22                     sum+=dp[i];
    23                 }else{
    24                     break;
    25                 }
    26             }
    27             System.out.println(i);
    28         }
    29 
    30     }
    31 }
  • 相关阅读:
    CGI与FastCGI
    Google Protocol Buffer 的使用和原理
    AMQP协议
    Java 多线程 并发编程
    深入理解HashMap
    Bitmap 位图
    Bloom Filter概念和原理
    BloomFilter–大规模数据处理利器
    java bitmap/bitvector的分析和应用
    Linux iptables 备忘
  • 原文地址:https://www.cnblogs.com/dream-flying/p/12803159.html
Copyright © 2020-2023  润新知