P2066 机器分配

题面

题目背景

题目描述

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

输入输出格式

输入格式:

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

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

输出格式:

第 \(1\) 行为最大盈利值

第 \(2\) 到第 \(n\) 为第 \(i\) 分公司分 \(x\) 台

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

输入输出样例

输入样例:

3 3
30 40 50
20 30 50
20 25 30

输出样例:

70
1 1
2 1
3 1

思路

设计 \(dp[i]\) 表示分配 \(i\) 台机器后能获得的最大盈利,定义 \(a[i][j]\) 为 \(i\) 公司在得到 \(j\) 台机器后能获得的利益,那么就有:

\[ dp[i]=max \{ dp[i-k]+a[j][k](j \in [1,n],i \in [1,m]) \} \]

代码实现的话可以这样写:

for(int i=1;i<=n;i++)for(int j=m;j>=0;j--)for(int k=j;k>=0;k--)dp[j]=max(dp[j],dp[j-k]+a[i][k]);

这样我们就能解决第一个问题。

那如何解决第二个问题呢?我们可以再定义一个变量 \(way[i][j]\) 表示分配出 \(i\) 台机器并得到最优解时第 \(j\) 家公司应该被分配 \(way[i][j]\) 台机器,那么每当 \(dp[i]\) 被更新时我们就需要来更新 \(way\) :

for(int i=1;i<=n;i++)for(int j=m;j>=0;j--)for(int k=j;k>=0;k--)if(dp[j]<dp[j-k]+a[i][k])dp[j]=dp[j-k]+a[i][k],way[j][i]=k;

等会!题目还有一个要求我们没有管:

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

实际上,我们这样更新时,因为是从前往后更新,所以本身就是按照字典序来更新的,所以就不用再管了。而得到题目要求的解时,我们就可以这样操作了:

for(int i=n;i;i--) ans[i]=way[m][i],m-=way[m][i];

接下来输出 \(ans\) 数组就好啦。

AC代码

#include<bits/stdc++.h>
using namespace std;
int n,m,a[20][20],dp[20],way[20][20],ans[20];
int read()
{int re=0;char ch=getchar();while(!isdigit(ch)) ch=getchar();while(isdigit(ch)) re=(re<<3)+(re<<1)+ch-'0',ch=getchar();return re;
}
int main()
{n=read(),m=read();for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=read();for(int i=1;i<=n;i++)for(int j=m;j>=0;j--)for(int k=j;k>=0;k--)if(dp[j]<dp[j-k]+a[i][k])dp[j]=dp[j-k]+a[i][k],way[j][i]=k;printf("%d",dp[m]);for(int i=n;i;i--) ans[i]=way[m][i],m-=way[m][i];for(int i=1;i<=n;i++) printf("\n%d %d",i,ans[i]);return 0;
}

转载于:https://www.cnblogs.com/coder-Uranus/p/9736597.html

Luogu P2066 机器分配(dp)相关推荐

  1. 洛谷 p2066 机器分配(资源型)

    机器分配 https://www.luogu.org/problem/show?pid=2066 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定 ...

  2. (14)某工业生产部门根据国家计划的安排, 拟将某种高效率的5台机器,分配给所属的3个工厂A,B,C,各工厂在获得这种机器后,可以为国家盈利的情况如表4-10所示。

    问题描述: (14)某工业生产部门根据国家计划的安排, 拟将某种高效率的5台机器,分配给所属的3个工厂A,B,C,各工厂在获得这种机器后,可以为国家盈利的情况如表4-10所示.问:这5台机器如何分配给 ...

  3. 【动态规划】机器分配 (ssl 1639)

    机器分配机器分配机器分配 Description 总公司拥有高效生产设备M台,准备分给下属的N个公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大? ...

  4. 信息学奥赛一本通(1266:【例9.10】机器分配)

    1266:[例9.10]机器分配 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 6867     通过数: 3370 [题目描述] 总公司拥有高效设备M台,准备分 ...

  5. [Luogu P2014]选课 (树形DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P2014 Solution 这是一道十分经典的树形DP题,这种类型的树形DP有一种很普遍的解法. 首先,观察 ...

  6. Luogu P5469 [NOI2019]机器人 (DP、多项式)

    不用FFT的多项式(大雾) 题目链接: https://www.luogu.org/problemnew/show/P5469 (这题在洛谷都成绿题了海星) 题解: 首先我们考虑,一个序列位置最右边的 ...

  7. 不止代码:机器分配(动态规划)

    题目描述 解析 头疼 什么破题 就是一个dp寻找最优性决策的常规题 但是要输出过程,可以使用递归输出 但是! 这题数据的意思是:存在a[i]=a[i+1]的情况,且在不影响利润的情况下,机器要尽可能的 ...

  8. 机器分配(信息学奥赛一本通-T1266)

    [题目描述] 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15,N≤10 ...

  9. Luogu P1002 过河卒(DP)

    P1002 过河卒 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之 ...

最新文章

  1. Analysis servlet
  2. [LeetCode226]Invert Binary Tree
  3. 印钞机 V1.0(量化选基总结)
  4. python标准词匹配_python匹配目标词
  5. HTML5中volume样式自定义,html5中关于volume属性的使用详解
  6. 斐波那契数列升级版(洛谷P2626题题解,C++语言描述)
  7. (71)FPGA时钟双沿约束如何做?
  8. 【Elasticsearch】es 的 translog
  9. Eclipse Debug不能热部署解决
  10. 计算机专业务必学好的基本课程
  11. 阿里云商标注册流程步骤-阿里云商标自助注册申请步骤
  12. 把一个人的特点写具体作文_把一个人的特点写具体作文400字
  13. torch.nn.CosineSimilarity() 三维张量
  14. The page has expired due to inactivity Please refresh and try again
  15. css样式换行缩进技巧
  16. 《从1到N企业数字化生存指南》读书笔记
  17. 平面设计师职业技能证书有哪些?
  18. 计算机知识培训感言,关于计算机培训心得体会
  19. 鸿蒙系统操作界面跟苹果很像,鸿蒙界面提前“泄密”,安卓和苹果的结合体,但内核已经换了!...
  20. 阿里云RPA机器人流程自动化快速入门

热门文章

  1. 彻底搞懂浏览器Event-loop 1
  2. 解读 2018之Go语言篇(下):明年有哪些值得期待?
  3. Flutter 萌新高频问题(加班猿妈妈叫你回家吃饭了)
  4. iOS 消息推送原理及实现Demo
  5. 数据结构例程——哈希表及其运算的实现
  6. Carlosfu技术系列文章总目录
  7. Ubuntu下GTK的安装、编译和测试
  8. 关于Breeze's MapHack 2.0的一些重要说明
  9. oracle rac war配置,Oracle RAC安装配置流程
  10. python偏函数和高阶函数_Python高阶函数-偏函数