zoukankan      html  css  js  c++  java
  • 采药问题 01背包

    Description:辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
    如果你是辰辰,你能完成这个任务吗? 
    Input:

         输入的第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
    Output:

    输出包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。

    Sample Input
    70 3
    71 100
    69 1
    1 2
    Sample Output
    3

    import java.util.Scanner;
    
    public class Main {
    	public int max(int a,int b){
    		 return a>b?a:b;
    	 }
    	public static void main(String[] args) {
    		Main m=new Main();
    		Scanner sc=new Scanner(System.in); 
    		int T;            //时间
    		int n;            //数量
    		int f[]=new int[1001];
    		int c[]=new int[101];            //时间
    		int w[]=new int[101];            //价值
    		int i,t;
    		while(sc.hasNext()){
    		    T=sc.nextInt();
    		    n=sc.nextInt();
    		    for(i=0;i<n;i++){
    			c[i]=sc.nextInt();
    			w[i]=sc.nextInt();
              	    }
    		    for(i=0;i<T;i++){
    			    f[i]=0;
    		    }
    		    for(i=0;i<T;i++)
    		      for(t=T;t>=c[i];t--){
    		    	f[t]=m.max(f[t],f[t-c[i]]+w[i]);
    		    }
    		    
    		    System.out.println(f[T]);
    		}
    	}
    }
    


    【注:该题未经过提交检验】

  • 相关阅读:
    入门金融学(1)
    递归之八皇后
    新手Oracle安装及使用入门
    RegExp正则校验之Java及R测试
    Mysql实现行列转换
    R语言之RCurl实现文件批量下载
    Consumer clientId=consumer-1, groupId=console-consumer-950] Connection to node -1 could not be
    线程池拒绝策略
    spring较为常用注解
    idea springboot启动报SLF4J:Failed to load class “org.slf4j.impl.StaticLoggerBinder”
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3752239.html
Copyright © 2011-2022 走看看