zoukankan      html  css  js  c++  java
  • TYVJ 1005 采药 (0-1背包)

    背景 Background
    NOIP2005复赛普及组第三题
     
    描述 Description
    辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。” 如果你是辰辰,你能完成这个任务吗?
     
    输入格式 InputFormat
    输入文件medic.in的第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
     
    输出格式 OutputFormat
    输出文件medic.out包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
     
    样例输入 SampleInput 

    70 3
    71 100
    69 1
    1 2

     
     
    样例输出 SampleOutput 
    3
     
    数据范围和注释 Hint
    对于30%的数据,M <= 10;对于全部的数据,M <= 100。
     
    裸0-1背包,能够用来采药的时间代表背包容量,采药的时间代表物品的花费,所采药的价值代表物品的价值,求最大价值。
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<algorithm>
     5 using namespace std;
     6 int w[101],v[101];
     7 int dp[1001];
     8 int main()
     9 {
    10     int m,n,i,j;
    11     scanf("%d %d",&m,&n);
    12     for(i=0;i<n;i++)
    13         scanf("%d %d",&w[i],&v[i]);
    14     for(i=0;i<n;i++)
    15         for(j=m;j>=w[i];j--)
    16             dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
    17     printf("%d
    ",dp[m]);
    18     return 0;
    19 }
    View Code
  • 相关阅读:
    一些你可能用到的代码
    iOS 键盘下去的方法
    iOS设计模式汇总
    随笔
    Spring cloud config 分布式配置中心 (三) 总结
    Spring cloud config 分布式配置中心(二) 客户端
    Spring cloud config 分布式配置中心(一) 服务端
    jdbcUrl is required with driverClassName spring boot 2.0版本
    JpaRepository接口找不到 spring boot 项目
    解决IntelliJ “Initialization failed for 'https://start.spring.io'
  • 原文地址:https://www.cnblogs.com/clliff/p/3879206.html
Copyright © 2011-2022 走看看