AcWing 1013. 机器分配 (分组背包)

简介: 笔记

1013. 机器分配


题意

总公司拥有M 台 相同 的高效设备,准备分给下属的N个分公司。


各分公司若获得这些设备,可以为国家提供一定的盈利。盈利与分配的设备数量有关。


问:如何分配这M台设备才能使国家得到的盈利最大?


求出最大盈利值。


分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M。


思路

分组背包裸题

状态表示f[i][j] 表示分配到前 i个公司 已经分配了j 台机器的利润最大值

状态计算:

设 k 表示给当前公司分配 k台机器

则k∈[1,j]

不给当前公司分配机器:f[i][j]=f[i−1][j]

给当前公司分配 k kk 台机器: f[i][j]=f[i−1][j−k]+w[i][k]

最后取max 即可

注意:需要输出具体方案 所以我们求f[i][j] 时从后往前求 这样的到的方案字典序最小


代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define mod 998244353
#define endl '\n'
#define int long long
using namespace std;
inline int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
inline int lowbit(int x) { return x & -x; }
typedef long long LL;
typedef pair<int, int>PII;
const int N = 1010;
int n, m;
int w[N][N];
int f[N][N];
int res[N];
void solve() {
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      scanf("%lld", &w[i][j]);
    }
  }
  //前 i 个公司 分配 j 个机器的 利润最大值
  for (int i = n; i >= 1; --i) {
    for (int j = 1; j <= m; ++j) {
      f[i][j] = f[i + 1][j];
      for (int k = 1; k <= m; ++k) {
        if (j - k >= 0)
          f[i][j] = max(f[i][j], f[i + 1][j - k] + w[i][k]);
      }
    }
  }
  cout << f[1][m] << endl;
  int ans = m;
  for (int i = 1; i <= n; ++i) {
    for (int k = 1; k <= m; ++k) {
      if (ans >= k && f[i][ans] == f[i + 1][ans - k] + w[i][k]) {
        res[i] = k;
        ans -= k;
        break;
      }
    }
  }
  for (int i = 1; i <= n; ++i)
    printf("%lld %lld\n", i, res[i]);
}
signed main() {
  //int t; cin >> t;
  //while(t--)
  solve();
  return 0;
}


目录
相关文章
|
4天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
14天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
8天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
565 210
|
3天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
228 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
796 59
|
6天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1112 157
|
6天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
479 109