P2066 机器分配 解析
小日记:
1、今天新学的字体颜色,尽管不熟悉,但玩的666,卡星(开心)
╰( ̄▽ ̄)╮╰( ̄▽ ̄)╮╰( ̄▽ ̄)╮╰( ̄▽ ̄)╮╰( ̄▽ ̄)╮╰( ̄▽ ̄)╮
2、今天油腔滑调,谅解亿下
题目
总公司拥有高效设备\(M\)台,准备分给下属的\(N\)个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这\(M\)台设备才能使国家得到的盈利最大?
求出最大盈利值。其中\(M≤15,N≤10\)。
分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M。
输入
第一行有两个数,第一个数是分公司数\(N\),第二个数是设备台数M。
接下来是一个\(N*M\)的矩阵,表明了第 \(I\)个公司分配 \(J\)台机器的盈利。
输出
第1行为最大盈利值
第2到第n为第i分公司分x台
\(P.S.\) 要求答案的字典序最小(为后文埋下伏笔)
样例
解析
设\(f[i][j]\)为前\(i\)个公司总共分配\(j\)台机器的最大利润。对于第\(i\)家子公司,我们可以给其分配的机器台数为:\(1-m\)
所以在该区间内枚举一个值k,状态转移方程即为:
\(f[i][j]=max(f[i-1][j-k],f[i][j])\)
那么,如何处理方案输出问题呢?
我们设\(path[i][j][h]\)对于前i个公司共分配\(j\)台机器的最优方案,第\(h\)个公司应分配多少台机器,当状态发生转移时,更新\(path\)数组即可。最终的答案就存放在\(path[n][m][i]\)之中。
代码如下
#include <bits/stdc++.h>
using namespace std;
int a[25][25];
int f[25][25];
int path[25][25][25];
int n,m;
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
}
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
for (int k=0;k<=j;k++){
if (f[i][j]<f[i-1][j-k]+a[i][k]){
f[i][j]=f[i-1][j-k]+a[i][k];
for (int l=1;l<i;l++)
path[i][j][l]=path[i-1][j-k][l];
path[i][j][i]=k;
}
}
printf("%d\n",f[n][m]);
for (int i=1;i<=n;i++)printf("%d %d\n",i,path[n][m][i]);
return 0;
}
巴特(But),you only have 90 分的好成绩
Why???
回到题面,我们会发现小小的一行字,人畜无害的鸭子(样子)
>(' )
)/
/( <---鸭子
/ `----/
\ ~=- /——:
要求答案的字典序最小
顿时,我***********
辣么,如何使字典序最小呢?这需要我们倒着枚举。
设方程式表示的意思为“不给”第i家公司k台机器(k的值域同上)
注意:并不是\(f\)的意思
那么状态转移方程需改为:
f[i][j]=max(f[i][k],f[i-1][k]+graph[i][j-k]);
再根据这个,对于path数组的更新操作进行一些微调,即可得到满分程序了:
#include <bits/stdc++.h>
using namespace std;
int a[25][25];
int f[25][25];
int path[25][25][25];
int n,m;
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
}
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
for (int k=0;k<=j;k++){
if (f[i][j]<f[i-1][k]+a[i][j-k]){
f[i][j]=f[i-1][k]+a[i][j-k];
for (int l=1;l<i;l++)
path[i][j][l]=path[i-1][k][l];
path[i][j][i]=j-k;
}
}
printf("%d\n",f[n][m]);
for (int i=1;i<=n;i++)printf("%d %d\n",i,path[n][m][i]);
return 0;
}
P2066 机器分配 解析的更多相关文章
- Luogu P2066 机器分配(dp)
P2066 机器分配 题面 题目背景 无 题目描述 总公司拥有高效设备 \(M\) 台,准备分给下属的 \(N\) 个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这 \(M\ ...
- 【线型DP】洛谷P2066 机器分配
[线型DP]洛谷P2066 机器分配 标签(空格分隔): 线型DP [题目] 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配 ...
- 洛谷 p2066 机器分配(资源型)
机器分配 https://www.luogu.org/problem/show?pid=2066 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定 ...
- P2066 机器分配 DP
题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15,N≤10.分 ...
- [洛谷P2066]机器分配
题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15,N≤10.分 ...
- luogu P2066 机器分配[背包dp+方案输出]
题目背景 无 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15 ...
- P2066 机器分配
题目背景 无 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15 ...
- 洛谷 P2066 机器分配
题目背景 Background 无 题目描述 Description 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能 ...
- P2066 机器分配 (DP+DP输出)
题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15,N≤10.分 ...
随机推荐
- SpringCloud微服务实战——搭建企业级开发框架(二):环境准备
这里简单说明一下在Windows系统下开发SpringCloud项目所需要的的基本环境,这里只说明开发过程中基础必须的软件,其他扩展功能(Docker,k8s,MinIO,XXL-JOB,EKL,Ke ...
- VUE调用子窗口弹窗或组件弹窗,关闭弹窗刷新父级页面主页面,通过this.$emit来实现
this.$emit是父级向自己传值 第一步在父级页面创建自己页面的引用 <template> <div> <edit ref="edit" @ref ...
- objcopy使用
objcopy - copy and translate object files:用于二进制文件的拷贝和翻译(转化) objcopy的man文件如下所示: objcopy [-F bfdname|- ...
- ahb时序解析
ahb 总线架构 AHB(Advanced High Performance Bus)总线规范是AMBA(Advanced Microcontroller Bus Architecture) V2.0 ...
- Relocations in generic ELF (EM: 40)
最近在搞机器上的wifi热点,需要移植一大堆东西,如hostapd\wpa_suppliant.dhcp等,这些玩意又依赖其他的一大堆库的移植,比如libnl,openssl等,今天在移植编译libn ...
- Educational Codeforces Round 113 (Rated for Div. 2)题解
\(A,B,C\)顺利签到,还是在\(D\)上面卡住了,之后在睡前还是想出来了,看来还是自己的思维不够敏捷和成熟... D. Inconvenient Pairs 简化题意,在一个直角坐标系中,有一些 ...
- Robot Framework操作MySQL数据库
1.安装databaselibrary.pymysql 通过cmd命令执行:pip install robotframework-databaselibrary cmd命令执行:pip install ...
- Emmet语法 —— 快速生成HTML结构
快速生成HTML结构语法 1.生成单个标签 : 标签名+tab,比如 div 然后tab 键, 就可以生成 <div></div> 2.生成多个相同标签 div*3 + tab ...
- Maven下载、安装、配置
简介 Maven是一个项目管理工具,主要用于Java平台的项目构建.依赖管理和项目生命周期管理. 当然对于我这样的程序猿来说,最大的好处就是对jar包的管理比较方便,只需要告诉Maven需要哪些jar ...
- [python]Pytest+selenium+git+jenkins持续集成
1安装pytest框架 &pip install pytest #pytest &pip install pytest-html #pytest html测试报告 2.工程介绍 ...