首页 > 其他分享 >机器分配 P2066 洛谷

机器分配 P2066 洛谷

时间:2023-05-11 21:23:28浏览次数:47  
标签:背包 机器 int 样例 P2066 分组 洛谷 分配 设备

#dp #背包求方案 #分组背包 #字典序 #T3

机器分配

P2066 机器分配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述

总公司拥有高效设备M台,准备分给下属的N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M≤15,N≤10。分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M。

输入格式

第一行有两个数,第一个数是分公司数N,第二个数是设备台数M。

接下来是一个N*M的矩阵,表明了第 I个公司分配 J台机器的盈利。

输出格式

第1行为最大盈利值

第2到第n为第i分公司分x台

P.S.要求答案的字典序最小

样例 #1

样例输入 #1

3 3
30 40 50
20 30 50
20 25 30

样例输出 #1

70
1 1
2 1
3 1

思路

揉合了 背包问题求具体方案 和 分组背包。

题目要求按字典序排列, 那我们输出答案时就不能从 n-1 方向来求, 需要用 1-n 来求, 根据反方向原则, 在求DP时要用n-1方向。

在看了紫书的教程后, 这里所做的逆向求解, 其实就是DAG那一节中的以i为起点的写法。

对于每个公司可以看做一组物品, 分组背包是枚举所有能选的, 这里一样, 求分组背包dp时要逆序n-1

然后再正序输出, 第一次循环公司, 第二层循环选几个, 如果满足:
f[i][j] == f[i + 1][j - k] + w[i][k]
则说明当前公司给了k台设备, break第二层循环后输出即可。

代码

const int N = 1010, M = 1010;
int v[N][M];
int f[N][M];

int n, m;

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> v[i][j];
    memset(f, 0, sizeof f);
    for (int i = n; i >= 1; i--)
    {
        for (int j = 0; j <= m; j++)
        {
            for (int k = 0; k <= j; k++)
                f[i][j] = max(f[i][j], f[i + 1][j - k] + v[i][k]);
        }
    }
    cout << f[1][m] << endl;
    for (int i = 1, j = m; i <= n; i++)
    {
        int res = 0;
        for (int k = 0; k <= j; k++)
            if (f[i][j] == f[i + 1][j - k] + v[i][k])
            {
                res = k;
                j -= k;
                break;
            }
        cout << i << " " << res << endl;
    }
    return 0;
}

标签:背包,机器,int,样例,P2066,分组,洛谷,分配,设备
From: https://www.cnblogs.com/edwinaze/p/17392263.html

相关文章

  • 洛谷 P5488 差分与前缀和
    洛谷传送门看起来很毒瘤,但是推出贡献系数后就是一个朴素的卷积了。首先考虑前缀和。考虑\(j\(j\lei)\)的\(a_j\)贡献到\(i\)的过程,是找到\(j=p_0\lep_1\le\cdots\lep_k=i\)的方案数。令\(x_i=p_i-p_{i-1}\),即求\(x_i\ge0,\sum\limits_{i=1}^kx_i......
  • 洛谷 P3321 [SDOI2015] 序列统计
    洛谷传送门感觉挺综合的一道题。考虑朴素dp,\(\forallx\inS,f_{i+1,jx\bmodm}\getsf_{i,j}\)。复杂度\(O(nm^2)\)。显然可以矩乘优化至\(O(m^3\logn)\),但是不能通过。如果转移式中是加法而不是乘法,那很容易卷积优化。接下来是一个很重要的套路:化乘为加。实数......
  • 基于EKF(拓展卡尔曼滤波器)与里程计算法的机器人定位的MATLAB程序
    基于EKF(拓展卡尔曼滤波器)与里程计算法的机器人定位的MATLAB程序使用EKF模型与里程计模型(Odometry)对机器人进行定位,定位的结果跟GPS定位的真实值作比较,验证两种算法的可行性。可以看出,EKF模型、里程计模型(Odometry)估计的误差变化趋势不同。EKF模型估计的误差总体趋势平稳,稳定在一定......
  • matlab程序,改进人工势场法模拟机器人路径规划与避障,障碍物的个数和坐标可以手动修改。
    matlab程序,改进人工势场法模拟机器人路径规划与避障,障碍物的个数和坐标可以手动修改。程序采用了模糊规则与人工势场算法相结合的方式来实现路径规划与避障。起点坐标,终点坐标,障碍物坐标,障碍物个数都可以在程序里直接改。ID:3960662710091016......
  • 动态避障,机器人动态障碍物避障程序,有四个障碍物,障碍物是移动的,程序为机器人动态障碍物
    动态避障,机器人动态障碍物避障程序,有四个障碍物,障碍物是移动的,程序为机器人动态障碍物避障程序,可以显示障碍物的运动轨迹以及机器人的运动轨迹ID:3969667311724516......
  • 基于遗传算法的机器人路径规划matlab程序 根据最基本的遗
    基于遗传算法的机器人路径规划matlab程序根据最基本的遗传算法原理实现了有障碍物条件下的移动机器人的路径规划问题。路径规划以最短路径为评判标准有详细的程序使用说明,可以手动修改起点坐标,终点坐标,障碍物坐标,障碍物坐标。ID:5965662020033273......
  • ABB机器人做EIP从站配置
    1机器人需要有选项841-1EthernetIPscanner/adapter选项,此时可以连接LAN3或者WAN口,或者使用840-1Ethernet/ipAnybusadapter,使用anybus网口 以下举例为841-1选项 2控制面板-配置,主题选择communication 3进入IPSETTING,编辑已有Ethernet/ip网络ip地址,并选择网口,此处......
  • 基于机器学习和人工智能的数据质量测试工具
    一、比较知名的工具(非完全免费)Trifacta:Trifacta:是一种自动数据质量检测和数据预处理工具,它使用机器学习算法来自动识别数据中的潜在问题,并建议数据清理操作。TalendDataQuality:TalendDataQuality是一种数据质量和数据清理工具,它使用机器学习算法来自动识别数据中的问题,......
  • 【机器学习之 朴素贝叶斯】6.1 贝叶斯分类器
    文章目录6.朴素贝叶斯6.0贝叶斯决策论6.0.1简介6.0.2贝叶斯解决的问题-逆概6.1.3先验概率和后验概率1)条件概率2)先验概率3)后验概率4)例子介绍6.0.4贝叶斯定理1)公式2)出现原因(逆概问题)6.0.5例子2)例一3)例二4)例三6.0.6全概率6.1贝叶斯分类器6.1.1贝叶斯判......
  • 2.1 程序的机器级表示
    本章将详细学习汇编语言,了解如何将c程序编译成这种形式的机器代码。数据格式各种数据类型大小如下操作数指示符大多数指令有一个或多个操作数,指示出执行一个操作中要使用的源数据值,以及放置结果的目的位置。各种操作数的可能性被分为三种,第一种是立即数,用来表示常数值,不同指......