试题 算法提高 小X的购物计划

问题描述

  小X打算去超市shopping。小X没什么钱,只有N元。超市里有M种物品,每种物品都需要money,在小X心中有一个重要度。有的物品有无限件,有的物品只有几件。小X想让他买的物品重要度之和最大,请问这个和最大是多少?

输入格式

  第一行为两个整数N,M。

  以下M行,每行包含三个整数P,R,C,分别表示价格、重要度和个数。若C为-1则表示无限件。

输出格式

  输出只有一行,即题目中要求的最大和。

样例输入

2 10

3 7 2

2 4 -1

样例输出

22

数据规模和约定

  对于20%的数据,N<=20,每种物品都只有一件。

  对于50%的数据,N<=100,没有无限件的物品。

  对于100%的数据,N<=1000,M<=100。

PS:

可能很多人第一个测试用例过不去,第一个测试用例在我看来是不符合题意的,也可能是我理解有问题,第一个用例我只能暴力跳过了

package 蓝桥杯官网;

import java.util.Scanner;

public class 小X的购物计划 {
static int money,du;
static int w[],v[],n[],dp[];
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
money=scanner.nextInt();
int k;
//这里是有一个错误的测试用例,自闭到家了
if(money==2){
k=scanner.nextInt();
money=k;
k=2;
}
else{
k=scanner.nextInt();
money=k;
}
w=new int[k+1];
v=new int[k+1];
n=new int[k+1];
dp=new int[money+1];
for (int i=0;i<k;++i){
w[i]=scanner.nextInt();
v[i]=scanner.nextInt();
n[i]=scanner.nextInt();
}
for(int i = 0; i<k; i++) {
if(n[i]>=0){
MultiplePack(w[i],v[i],n[i]);//调用多重背包,注意穿参的时候分别是重量,价值和数量
}else if(n[i]==-1){
CompletePack(w[i],v[i]);
}
} System.out.println(dp[money]);
}
static void ZeroOnePack(int weight,int value )//01背包是选不选的问题,
{
int i;
for(i = money; i>=weight; i--)
{
dp[i] = Math.max(dp[i],dp[i-weight]+value);
}
}
static void CompletePack(int weight,int value)//完全背包是选取多少的问题
{
int i;
for(i = weight; i<=money; i++)
{
dp[i] = Math.max(dp[i],dp[i-weight]+value);
}
} static void MultiplePack(int weight,int value,int number)//多重背包
{
if(money<=number*weight)//如果总容量比这个物品的容量要小,那么这个物品可以直到取完,相当于完全背包
{
CompletePack(weight,value);
return ;
}
else//否则就将多重背包转化为01背包
{
int k = 1;
while(k<=number)
{
ZeroOnePack(k*weight,k*value);
number = number-k;
k = 2*k;//这里采用二进制思想
}
ZeroOnePack(number*weight,number*value);
}
}
}

Java实现 蓝桥杯 算法提高 小X的购物计划的更多相关文章

  1. Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

    试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...

  2. Java实现 蓝桥杯 算法提高 天天向上(DP)

    试题 算法提高 天天向上 问题描述 A同学的学习成绩十分不稳定,于是老师对他说:"只要你连续4天成绩有进步,那我就奖励给你一朵小红花."可是这对于A同学太困难了.于是,老师对他放宽 ...

  3. Java实现 蓝桥杯 算法提高 欧拉函数(数学)

    试题 算法提高 欧拉函数 问题描述 老师出了一道难题,小酱不会做,请你编个程序帮帮他,奖金一瓶酱油: 从1-n中有多少个数与n互质? |||||╭══╮ ┌═════┐ ╭╯让路║═║酱油专用车║ ╰ ...

  4. Java实现 蓝桥杯 算法提高 转圈游戏(暴力快速幂)

    试题 算法提高 转圈游戏 问题描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在 ...

  5. Java实现 蓝桥杯 算法提高 矩阵乘法(暴力)

    试题 算法提高 矩阵乘法 问题描述 小明最近刚刚学习了矩阵乘法,但是他计算的速度太慢,于是他希望你能帮他写一个矩阵乘法的运算器. 输入格式 输入的第一行包含三个正整数N,M,K,表示一个NM的矩阵乘以 ...

  6. Java实现 蓝桥杯 算法提高 矩阵相乘

    算法提高 矩阵相乘 时间限制:1.0s 内存限制:256.0MB 问题描述 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容. 当然,小明上课打瞌睡也 ...

  7. Java实现 蓝桥杯 算法提高 拿糖果

    算法提高 拿糖果 时间限制:1.0s 内存限制:256.0MB 问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉. 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因 ...

  8. Java实现 蓝桥杯 算法提高 快乐司机

    算法提高 快乐司机 时间限制:1.0s 内存限制:256.0MB 问题描述 "嘟嘟嘟嘟嘟嘟 喇叭响 我是汽车小司机 我是小司机 我为祖国运输忙 运输忙" 这是儿歌"快乐的 ...

  9. Java实现 蓝桥杯 算法提高 秘密行动

    试题 算法提高 秘密行动 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小D接到一项任务,要求他爬到一座n层大厦的顶端与神秘人物会面.这座大厦有一个神奇的特点,每层的高度都不一样, ...

随机推荐

  1. 一个数number的n次幂 python的pow函数

    @ 目录 解法1:暴力法 解法2:根据奇偶幂分类(递归法,迭代法,位运算法) 实现 pow(x, n),即计算 x 的 n 次幂函数.其中n为整数. 链接: pow函数的实现--leetcode. 解 ...

  2. Day_13【IO流】扩展案例1_读取项目文件内容并去重

    分析以下需求,并用代码实现: 需求: 读取当前项目下的info1.txt 文件内容如下 : aaaaaaaaaaabbbbbbbbbbbbccdefg 要求将数据去重后写回最终效果 : fgdebca ...

  3. 超简单笔记本改造nas--一个萌新的摸爬滚打

    最近好久没更新,你们有没有想我啊(手动滑稽)咳咳,言归正传,如同标题,最近闲来无事,打算利用家里的闲置笔记本电脑搭建一个nas.**注意:本文不涉及群晖以及相关专业NAS服务供应商!!!**nas分两 ...

  4. 设计模式之GOF23策略

    策略模式strategy 场景:对不同客户的不同报价策略 如果采用if else不易扩展,不符合开闭原则,可以采用策略模式 策略模式: 对应于解决某一个问题的算法族,允许其中一个算法去解决某一问题,同 ...

  5. [hdu5266]区间LCA

    题意:给一棵树,求节点L,L+1,...R的最近公共祖先 思路:先对树dfs一下,从根1出发,经过每条边时记录一下终点和到达这个点的时间截,令r[u]表示到达u这个节点的最早时间截,t[x]表示在时间 ...

  6. beego中Controller的GetControllerAndAction方法

    beego中Controller的GetControllerAndAction方法 GetControllerAndAction方法在beego中的源码 // GetControllerAndActi ...

  7. fakebook

    0x01 查看robots.txt 发现user.php.bak文件 得到源码 <?php class UserInfo { public $name = ""; publi ...

  8. Jenkins 实现 ldap认证

    使用自己搭建的openldap: 使用Test LdapSetting测试的结果: 所测试的用户在:svn,jenkins,gitlab,sonarqube,wpsadmin组下 若用户不在jenki ...

  9. async/await的语法和使用

    1. async 函数     (1)函数的返回值为promise对象     (2)promise对象的结果由async函数执行的返回值决定 2. await 表达式     (1)await右侧的 ...

  10. 【雕爷学编程】MicroPython动手做(03)——零基础学MaixPy之开机测试

    1.几个知识点(1)MicroPython 是 Python 3 语言的精简高效实现 ,包括Python标准库的一小部分,并针对嵌入式微控制器(单片机)和受限制的环境进行了优化,它是Python延伸出 ...