洛谷 P2760 科技庄园(多重背包,二进制优化)

server/2024/10/23 12:49:27/

题目链接

https://www.luogu.com.cn/problem/P2760

思路

一个很明显的多重背包问题。

乍一看有两个体积,一个是时间,一个是体力。但时间和体力的消耗是相同的,所以背包的容量为: m i n ( min( min(时间,体力 − 1 -1 1 ) ) )。因为体力不能降为 0 0 0,所以要减一。

每一个物品的消耗是 ( i , j ) (i,j) (i,j) ( 0 , 0 ) (0,0) (0,0)的曼哈顿距离乘以 2 2 2。考虑到最多会有 n 2 × k n^{2} \times k n2×k 1 e 6 1e6 1e6)个物品,我们可以使用多重背包的二进制优化进行求解。

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;
const int N = 1e2 + 5, M = 1e4 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f3f3f3f3f;int n, m, t, a;
int s[N][N];
vector<int>w, v;
void solve()
{cin >> n >> m >> t >> a;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> s[i][j];}}for (int i = 1, k; i <= n; i++){for (int j = 1; j <= m; j++){cin >> k;if (k > 0){for (int op = 1; op <= k; op <<= 1){k -= op;w.push_back(s[i][j] * op);v.push_back((i + j) * op * 2);}if (k > 0){w.push_back(s[i][j] * k);v.push_back((i + j) * k * 2);}}}}int V = min(t, a - 1);vector<int>dp(V + 1, 0);for (int i = 0; i < w.size(); i++){for (int j = V; j >= v[i]; j--){dp[j] = max(dp[j], dp[j - v[i]] + w[i]);}}cout << dp[V] << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int test = 1;// cin >> test;for (int i = 1; i <= test; i++){solve();}return 0;
}

http://www.ppmy.cn/server/134177.html

相关文章

KUKA机器人选定程序时提示“选择非法”的处理方法

KUKA机器人选定程序时提示“选择非法”的处理方法 如下图所示,选中某个程序,点击选定时, 系统提示:选择非法, 具体处理方法可参考以下内容: 选中该程序后,在右下角打开【编辑】菜单键,再选择【属性】,打开后可以看到程序的一般说明、信息模块和参数等信息,如下图所示…

k8s的微服务

ipvs模式 Service 是由 kube-proxy 组件&#xff0c;加上 iptables 来共同实现的 kube-proxy 通过 iptables 处理 Service 的过程&#xff0c;需要在宿主机上设置相当多的 iptables 规则&#xff0c;如果宿主机有大量的Pod&#xff0c;不断刷新iptables规则&#xff0c;会消耗…

胤娲科技:AI教父荣膺诺奖——神经网络掀起物理与智能的交响曲

想象一下&#xff0c;当你漫步在秋日金黄的落叶小径上&#xff0c;夕阳温柔地洒在你的肩头&#xff0c;忽然一则消息震撼了你的科技世界——诺贝尔物理学奖&#xff0c;竟然颁给了人工智能&#xff08;AI&#xff09;&#xff01; 没错&#xff0c;不是凝聚态物理或量子物理那些…

Python学习的自我理解和想法(20)

#1024程序员节|征文# 学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第20天&#xff0c;学的内容是面向对象中的私有属性&#xff0c;私有方法&#xff0c;多态&#xff0c;单例计模式。开…

【Gin】Gin框架介绍和使用

一、简单使用Gin框架搭建一个服务器 package mainimport ("github.com/gin-gonic/gin" )func main() {// 创建一个默认的路由引擎r : gin.Default()// GET 请求方法r.GET("/hello", func(c *gin.Context) {// c.JSON 返回的是JSON格式的数据c.JSON(200, g…

pytest框架的allure报告怎么去看

pytest框架的allure报告怎么去看 一、安装jdk和allure1.1安装jdk&#xff08;自行找资料&#xff09;1.2安装Allure 二、编写pytest代码三、执行脚本3.1 运行测试并生成 Allure 结果3.2 你可以使用以下命令来查看生成的报告3.3生成的视图 一、安装jdk和allure 1.1安装jdk&…

【汇编语言】第一个程序(一)—— 一个源程序从写出到执行的过程

文章目录 前言1. 第一步&#xff1a;编写汇编源程序2. 第二步&#xff1a;对源程序进行编译连接3. 第三步&#xff1a;执行可执行文件中的程序结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程…

Mac中安装以及配置adb环境

一、adb介绍 Android 调试桥 (Android Debug Bridge) 是一种功能多样的命令行工具&#xff0c;可让您与设备进行通信。adb 命令可用于执行各种设备操作&#xff0c;例如安装和调试应用。adb 提供对 Unix shell&#xff08;可用来在设备上运行各种命令&#xff09;的访问权限。…