当前位置: 首页 > news >正文

01背包 Java

① 记忆化搜索解法:

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

public class Main {
	static int n, m;
	static int[] v, w;
	static int[][] memory; // 记忆化数组

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());
		v = new int[n + 1];
		w = new int[n + 1];
		memory = new int[n + 1][m + 1];
		for (int i = 1; i <= n; i++) {
			st = new StringTokenizer(br.readLine());
			v[i] = Integer.parseInt(st.nextToken());
			w[i] = Integer.parseInt(st.nextToken());
		}
		System.out.println(dfs(1, 0));
	}

	static int dfs(int i, int vSum) {
		if (i > n) return 0;
		if (memory[i][vSum] != 0) return memory[i][vSum]; // 直接返回存储的值,跳过重复计算
		int reject = dfs(i + 1, vSum); // 左分支,不选当前物品
		int accept = 0; // 右分支,选中当前物品
		if (vSum + v[i] <= m)
			accept = dfs(i + 1, vSum + v[i]) + w[i]; // 要加上物品价值
		return memory[i][vSum] = Math.max(reject, accept); // 存储当前的值
	}
}

② dp解法(更优化):

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

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		int[] v = new int[1005];
		int[] w = new int[1005];
		int[][] dp = new int[1005][1005];
		for (int i = 1; i <= n; i++) {
			st = new StringTokenizer(br.readLine());
			v[i] = Integer.parseInt(st.nextToken());
			w[i] = Integer.parseInt(st.nextToken());
		}
		for (int i = 1; i <= n; i++) {
			for (int j = 0; j <= m; j++) {
				if (j < v[i]) dp[i][j] = dp[i - 1][j];
				else dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - v[i]] + w[i]);
			}
		}
		System.out.println(dp[n][m]);
	}
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

相关文章:

  • 复现QGIS-MCP教程
  • 《从单体到分布式:一个订单系统的架构升级》
  • 第37次CCF计算机软件能力认证 / T4 / 集体锻炼
  • 创建 Pod 失败,运行时报错 no space left on device?
  • 3. git config
  • 《AI换脸时代的攻防暗战:从技术滥用走向可信未来》
  • AIGC时代的新风口!MCP协议引领未来无限可能
  • 【RabbitMQ】延迟队列
  • C/C++ 与 Java IO 机制对比解析和流与缓冲的概念介绍
  • [GESP202312 五级] 平均分配
  • C语言今天开始了学习
  • 【python读取并显示遥感影像】
  • win日志
  • 仿真每日一练 | ABAQUS子程序DLOAD
  • 复杂物快速定性定量:液相色谱质谱联用仪
  • 7.第二阶段x64游戏实战-string类
  • 【MySQL基础】左右连接实战:掌握数据关联的完整视图
  • LabVIEW 中 JSON 数据与簇的转换
  • Java实战报错 tcp
  • 深入理解深度学习模型的训练与评估模式:从基础组件到实战应用
  • 做网站申请域名空间/聚合广告联盟
  • 如何设计一个完整的网站/如何做网络推广
  • wordpress网盘资源/sem优化服务公司
  • 手机网站建设 的作用/seo优化工作内容做什么
  • 移动商城网站开发/2022最新免费的推广引流软件
  • 公司需要做网站/淘宝推广费用多少钱一天