采药

采药









Time Limit:   1000MS       Memory Limit:   65535KB
Submissions:   380       Accepted:   113

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
方法一
DFS 超时

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

#include <iostream>

using
namespace std;

int
value,num;

int
val[100],tim[100];

int
MAX_Val;

int
flag,temp;

int
vis[100];

void
dfs(int
n)

{

    if(n>num)

    return
;

    if(temp>value)

    return
;

    if(n==num&&MAX_Val<flag)

    {

        MAX_Val = flag;

    }

    for(int
i=0;i<num;i++)

    {

        if(!vis[i])

        {

            temp+=tim[i];

            flag+=val[i];

            vis[i] = 1;

            dfs(i+1);

            vis[i] = 0;

            temp-=tim[i];

            flag-=val[i];

        }

    }

}

 int
main()

 {

     cin>>value>>num;

     for(int
i=0;i<num;i++)

     {

         cin>>tim[i]>>val[i];

     }

     MAX_Val = 0;

     flag =0;temp=0;

     dfs(0);

     cout<<MAX_Val<<endl;

     return
0;

 }

  



方法二
DP

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#include<iostream>

# include<cstring>

# define max(a,b) a>b?a:b

using
namespace std;

int
main()

{

int
dp[101][1001],m,T,w[101],val[101],i,j;

cin>>T>>m;

for(i=1;i<=m;i++)

cin>>w[i]>>val[i];

memset(dp,0,sizeof(dp));

for(i=1;i<=m;i++)

for(j=0;j<=T;j++)//j相当于上面说的V-c[i]

{

if(j>=w[i])

dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+val[i]);//放还是不放的选择

else
dp[i][j]=dp[i-1][j];

}

cout<<dp[m][T]<<endl;

return
0;

}

  

采药,布布扣,bubuko.com

时间: 2024-08-09 02:02:44

采药的相关文章

洛谷 P1048 采药 x

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

采药 2005年NOIP全国联赛普及组&amp;疯狂的采药

时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:"孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值.我会给你一段时间,在这段时间里,你可以采到一些草药.如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大."

1616 疯狂的采药(完全背包问题)

难度:普及- 题目类型:动规 提交次数:1 涉及知识:背包动规 题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同种类的草药,采每一种都需要一些时间,每一种也有它自身的价值.我会给你一段时间,在这段时间里,你可以采到一些草药.如

tyvj1005 采药

描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值.我会给你一段时间,在这段时间里,你可以采到一些草药.如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大.” 如果你是辰辰,你能完成这个任务吗? 输入格式 输入文件medic.in的第一行有两个整数T(1 <= T <= 1

NOIP200503采药

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

sicily 1146 采药 (动规)

打代码不走心会掉坑里的.. 下边是代码: 1 //1146.采药 2 //t表示总时间 3 //m表示草药数 4 //w表示采药时间 5 //v表示草药价值 6 #include <iostream> 7 using namespace std; 8 9 #define MAX(a,b) a>b?a:b 10 11 int MaxValue(int w[], int v[], int m, int t) { 12 int max[m+1][t+1]; 13 for (int i = 0;

九度 题目1123:采药

题目描述: 辰辰是个很有潜能.天资聪颖的孩子,他的梦想是称为世界上最伟大的医师. 为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题. 医师把他带到个到处都是草药的山洞里对他说: "孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值. 我会给你一段时间,在这段时间里,你可以采到一些草药.如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大." 如果你是辰辰,你能完成这个任务吗? 输入: 输入的第一行有两个整数T(1 <=

采药(01背包)

题目1123:采药 点我 题目描述: 辰辰是个很有潜能.天资聪颖的孩子,他的梦想是称为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值.我会给你一段时间,在这段时间里,你可以采到一些草药.如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大.”如果你是辰辰,你能完成这个任务吗? 输入: 输入的第一行有两个整数T(1 <=

NOIP2005-普及组复赛-第三题-采药

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

(RQoj 15 采药------rwkj 10.1.5.253 1447) 记忆式搜索 2

#include <iostream>#include <string.h>using namespace std;int dp[105][1005], w[105],v[105],T,M,;int max(int x,int y) { return x>y?x:y; }int f(int x,int y){ int t; if (dp[x][y]!=-1) return dp[x][y]; if ( x==M+1 || y==0 ) return dp[x][y]=0; e