侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 675 篇文章
  • 累计创建 128 个标签
  • 累计收到 26 条评论

目 录CONTENT

文章目录

【动态规划】采药「动态规划之01背包模型」

GabrielxD
2023-02-14 / 0 评论 / 0 点赞 / 225 阅读 / 701 字
温馨提示:
本文最后更新于 2023-05-04,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

题目

423. 采药 - AcWing题库


辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。

为此,他想拜附近最有威望的医师为师。

医师为了判断他的资质,给他出了一个难题。

医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”

如果你是辰辰,你能完成这个任务吗?

输入格式

输入文件的第一行有两个整数 TTMM ,用一个空格隔开, TT 代表总共能够用来采药的时间, MM 代表山洞里的草药的数目。

接下来的 MM 行每行包括两个在 11100100 之间(包括 11100100 )的整数,分别表示采摘某株草药的时间和这株草药的价值。

输出格式

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

数据范围

1T10001 \le T \le 1000 ,
1M1001 \le M \le 100

输入样例:

70 3
71 100
69 1
1 2

输出样例:

3

解题

方法一:动态规划

思路

01背包裸题,直接套模板即可。

其中:山洞里的草药的数目是物品种类 n ,采药的时间是背包容量 c ,采摘某株草药的时间是每个物品的体积 v ,某株草药的价值是每个物品的价值 w

代码

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        in.nextToken();
        int c = (int) in.nval;
        in.nextToken();
        int n = (int) in.nval;
        int[] v = new int[n + 1], w = new int[n + 1];
        for (int i = 1; i <= n; ++i) {
            in.nextToken();
            v[i] = (int) in.nval;
            in.nextToken();
            w[i] = (int) in.nval;
        }
        int[] f = new int[c + 1];
        for (int i = 1; i <= n; ++i) {
            for (int j = c; j >= v[i]; --j) {
                f[j] = Math.max(f[j], f[j - v[i]] + w[i]);
            }
        }
        System.out.println(f[c]);
    }
}
#include <iostream>

using namespace std;

const int N = 1010;
int t, m;
int f[N];

int main() {
    scanf("%d%d", &t, &m);
    for (int i = 0; i < m; ++i) {
        int v, w;
        scanf("%d%d", &v, &w);
        for (int j = t; j >= v; --j) {
            f[j] = max(f[j], f[j - v] + w);
        }
    }
    printf("%d\n", f[t]);

    return 0;
}
0

评论区