30. 有一个人前来买瓜

Discription

军训这么累,当然要吃瓜啦。

有一个小军前来买瓜。

众所周知,YHW水果摊里的西瓜的瓜皮子和瓜粒子都是金粒子做的。小军当然想获得尽可能多的金粒子。

一共有n个瓜,每个瓜有重量w,成熟度v,金粒子数量g。

虽然小军的钱是无限的,但他的电动车载重是有限的,因此他不能买总重量超过W的瓜。

"我开水果摊的,能卖给你生瓜蛋子? ——YHW

因此,当小军买的瓜的总成熟度小于V时,YHW并不会把瓜卖给他。

具体的:水果摊一共有n个瓜,每个瓜有重量w,成熟度v,金粒子数量g。一共有q次询问,每次询问给出两个值W、V,小军要选取n个瓜的子集,使总重量 Σw≤W,总成熟度Σv≥V,求 Σg
的最大值。

Input

第一行输入两个整数,q(1≤n≤100,1≤q≤100),代表瓜的数量和询问数量。

接下来n行,每行三个整数,第i行的三个整数为i,vi,gi(1≤wi,vi,gi≤100),分别代表第i个瓜的重量,成熟度和价值。

接下来q行,输入两个整数,V(1≤W,V≤500),代表一组询问。

Output

输出一共有q行,每行一个整数,分别代表每组询问的最大金粒子数总和,若无合法的买法则输出-1。

测试输入 期待的输出 时间限制 内存限制 额外进程
测试用例 1 以文本方式显示
  1. 5 1↵
  2. 2 4 5↵
  3. 4 3 3↵
  4. 1 3 2↵
  5. 3 4 3↵
  6. 3 2 5↵
  7. 10 10↵
以文本方式显示
  1. 15↵
1秒 64M 0
思路

比背包问题多了一个维度。可以使用 dp[j][k] 储存当质量为j且成熟度为k时的金粒,(与空间优化后的背包同理,质量和成熟度需要从大到小遍历,防止覆盖数据)。三维肯定会超时。

只需要进行一次动态规划,对于每一次对话查表就OK

初始化dp=-1, dp[0][0]=0;状态转移方程参考背包问题。额外注意的是当成熟度大于500时可以直接放在500里面,减少空间。

代码
#include <stdio.h>
#include <string.h>
#define N 102
#define M 500
int dp[M+1][M+1];
int max(int a, int b)
{
    return a > b ? a : b;
}
int min(int a, int b)
{
    return a < b ? a : b;
}
int main(int argc, char const *argv[])
{
    int n, q, i, j, k, W, V;
    int w[N], v[N], g[N];
    memset(dp,-1,sizeof(dp));
    dp[0][0]=0;
    
    scanf("%d %d", &n, &q);    
	for (i = 1; i <= n; i++){
		scanf("%d %d %d", &w[i], &v[i], &g[i]);
	}
        
    for (i = 1; i <= n; i++)
    {
        for (j = M; j >= 0; j--)
        {
            for (k = M; k >= 0; k--)
            {				
				if(dp[j][k]==-1 || j+w[i]>500)	continue;
				dp[j+w[i]][min(k+v[i],M)]=max(dp[j][k]+g[i],dp[j+w[i]][min(k+v[i],M)]);
            }
        }
    }

    for (i = 0; i < q; i++)
    {
        scanf("%d %d", &W, &V);
        int gold = -1;
        for (j = 0; j <= W; j++)
        {
            for (k = V; k <= M; k++)
            {
                if (dp[j][k] > gold && dp[j][k])
                    gold = dp[j][k];
            }           
        }

		printf("%d\n", gold);
    }

    return 0;
}

相关推荐

  1. #陕西大桥垮塌仍20车30失联#

    2024-07-21 23:34:04       17 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 23:34:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 23:34:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 23:34:04       45 阅读
  4. Python语言-面向对象

    2024-07-21 23:34:04       55 阅读

热门阅读

  1. 基于最新版的flutter pointycastle: ^3.9.1的AES加密

    2024-07-21 23:34:04       15 阅读
  2. Shiro-550反序列化漏洞

    2024-07-21 23:34:04       15 阅读
  3. Kotlin单例、数据类、静态

    2024-07-21 23:34:04       18 阅读
  4. CSP-J模拟赛day1

    2024-07-21 23:34:04       19 阅读
  5. Linux下双网卡NAT组网

    2024-07-21 23:34:04       19 阅读
  6. Node的API基础

    2024-07-21 23:34:04       17 阅读
  7. C2W3.LAB.N-grams+Language Model+OOV

    2024-07-21 23:34:04       17 阅读
  8. 力扣题解(一和零)

    2024-07-21 23:34:04       21 阅读