• [Jobdu] 题目1455:珍惜现在,感恩生活


    题目描述:

    为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。请问:你用有限的资金最多能采购多少公斤粮食呢?

    输入:

    输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分别表示每袋的价格、每袋的重量以及对应种类大米的袋数。

    输出:

    对于每组测试数据,请输出能够购买大米的最多重量,你可以假设经费买不光所有的大米,并且经费你可以不用完。每个实例的输出占一行。

    样例输入:
    1
    8 2
    2 100 4
    4 100 2
    
    样例输出:
    400

    经典的背包问题,动态规划。

     1 #include <iostream>
     2 using namespace std;
     3  
     4 int C;
     5 int n, m;
     6 int p, h, c;
     7 int dp[101];
     8 int res;
     9  
    10 int max(int a, int b) {
    11     return a > b ? a : b;
    12 }
    13  
    14 void init() {
    15     res = 0;
    16     for (int i = 0; i < n + 1; ++i) {
    17         dp[i] = -1;
    18     }
    19     dp[0] = 0;
    20 }
    21  
    22 void refresh() {
    23     for (int i = 0; i < c; ++i) {
    24         for (int j = n; j >= p; --j) {
    25             if (dp[j-p] >= 0) {
    26                 dp[j] = max(dp[j], dp[j-p] + h);
    27             }
    28             res = max(res, dp[j]);
    29         }
    30     }
    31 }
    32  
    33 int main() {
    34     cin >> C;
    35     for (int i = 0; i < C; ++i) {
    36         init();
    37         cin >> n >> m;
    38         for (int j = 0; j < m; ++j) {
    39             cin >> p >> h >> c;
    40             refresh();
    41         }
    42         cout << res << endl;
    43     }
    44     return 0;
    45 }
    46 /**************************************************************
    47     Problem: 1455
    48     User: hupo250
    49     Language: C++
    50     Result: Accepted
    51     Time:10 ms
    52     Memory:1520 kb
    53 ****************************************************************/
  • 相关阅读:
    小阳买水果
    单调队列+dp
    最长的合法序列(栈+dp)
    A. 打印收费
    数位dp(K好数)
    Floyd(选地址)
    最短路计数
    线段树维护区间01
    解密(拓展欧几里的)
    树、森林的遍历
  • 原文地址:https://www.cnblogs.com/easonliu/p/3904161.html
Copyright © 2020-2023  润新知