动态规划入门之01背包变形嗑药

P1802 5 倍经验日 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

嗑药固然可耻,但是能让你快速变强 --鲁迅

手动滑稽,话归正题

动态规划之背包入门01背包模板_爱莉我老婆的博客-CSDN博客

这是01背包的模板,没看的可以去看看。

我们把药品总量看成一个背包,我们把打败每一人的药品消耗看成体积,那么就是说我们把这个物品装进背包会产生一个价值,不装进背包也会产生一个价值。那么我们在01背包的基础上改进,可以写出如下状态转移方程

java 复制代码
for(c=1;c<=a;c++) {
	String[] bStrings=br1.readLine().split(" ");
	int e=Integer.parseInt(bStrings[0]);//输入打输时的价值(即装不进背包的价值)
	int f=Integer.parseInt(bStrings[1]);//(装进背包的价值)
	int g=Integer.parseInt(bStrings[2]);//物品所占的空间	
	for(d=b;d>=0;d--) {//枚举体积,由于我们采用一维压缩,所以倒序保证物品之多会被选择一件
		if(d>=g) {//体积达到,从不装第c个物品前c-1个物品里边选取放到容积为d的背包
			dp[d]=Math.max(dp[d]+e, dp[d-g]+f);//选择第c个物品,
		}
		else {
			dp[d]=dp[d]+e;//体积不够直接装装不了的价值
		}
	}
}

完整代码:

java 复制代码
import java.awt.FontFormatException;
import java.io.BufferedReader; 
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.AnnotatedWildcardType;
import java.math.BigInteger;
import java.net.DatagramPacket;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Objects;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Spliterator.OfPrimitive;
import java.util.function.IntToDoubleFunction;
import java.util.function.LongBinaryOperator;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.management.relation.InvalidRelationTypeException;
import javax.print.attribute.standard.JobMessageFromOperator;
import javax.print.attribute.standard.JobPriority;
import javax.swing.plaf.ColorChooserUI;
import javax.swing.table.TableModel;
import javax.swing.text.TabSet;
import javax.xml.crypto.dsig.spec.DigestMethodParameterSpec;
public class Main {
  public static void main(String[] args) throws IOException  {
Scanner sc=new Scanner(System.in);
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw1=new PrintWriter(System.out);
String[] aStrings=br1.readLine().split(" ");
int a=Integer.parseInt(aStrings[0]);
int b=Integer.parseInt(aStrings[1]);
dp=new long[b+1];

int c,d;
for(c=1;c<=a;c++) {
	String[] bStrings=br1.readLine().split(" ");
	int e=Integer.parseInt(bStrings[0]);
	int f=Integer.parseInt(bStrings[1]);
	int g=Integer.parseInt(bStrings[2]);	
	for(d=b;d>=0;d--) {
		if(d>=g) {
			dp[d]=Math.max(dp[d]+e, dp[d-g]+f);
		}
		else {
			dp[d]=dp[d]+e;
		}
	}
}
System.out.println(5*dp[b]);
  }

public static long[] dp;
		  
 }
 

此题必须开long

相关推荐
sin_hielo几秒前
leetcode 3013
数据结构·算法·leetcode
小信丶1 分钟前
@EnableMethodCache 注解详解:原理、应用场景与示例代码
java·spring boot·后端·spring
格林威3 分钟前
Baumer相机系统延迟测量与补偿:保障实时控制同步性的 5 个核心方法,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·工业相机
老鼠只爱大米3 分钟前
LeetCode经典算法面试题 #105:从前序与中序遍历序列构造二叉树(分治递归法、栈辅助迭代法等五种实现方案详细解析)
算法·leetcode·二叉树·分治算法·前序遍历·迭代法·二叉树构造
坊钰4 分钟前
【Rabbit MQ】Rabbit MQ 的结构详解,传输机制!!!
java·rabbitmq
Psycho_MrZhang4 分钟前
Claude高质量产出
java·服务器·网络
uesowys4 分钟前
Apache Spark算法开发指导-Gradient-boosted tree classifier
人工智能·算法·spark
.小墨迹7 分钟前
开源的自动驾驶框架
c++·人工智能·学习·算法·ubuntu·开源·自动驾驶
spencer_tseng3 小时前
Stream not available [SysDictDataMapper.xml]
xml·java
蒸蒸yyyyzwd8 小时前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习