题目描述

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

输入格式
第1行有两个数,第一个数是分公司数N,第二个数是设备台数M。接下来是一个N*M的矩阵,表明了第i个公司分配j台机器的盈利。
输出格式
第1行输出最大盈利值。
接下来N行,每行2个数,即分公司编号和该分公司获得设备台数。

样例

样例输入

3 3
30 40 50
20 30 50
20 25 30

样例输出

70
1 1
2 1
3 1

思路分析

这题关键点有两个:

  • 将机器进行分组分配并记录
  • 输出路径

    主要说一下输出路径这里,首先可以确定,在状态转移的时候每个更优的状态都是用某个公司分配k个机器更新的,联想到背包问题,就是容量为j的背包在装入了k件第i件物品所获得的最优值,最后一次被更新时存储的就是我们要的答案

代码

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn = 20;
int dp[maxn][maxn],a[maxn][maxn],path[maxn][maxn];
void Print(int x,int y){ //递归输出,x代表前x个公司,y代表待分配的机器数
if(x == 0)return;
Print(x-1,y-path[x][y]); //返回上一级路径
printf("%d %d\n",x,path[x][y]);
}
int main(){
int n,m;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++){ //i为公司
for(int j = 1;j <= m;j++){ //j为所有公司分配的机器数
for(int k =0;k <= j;k++){ //k为该公司分配的机器个数
int val = dp[i-1][j-k] + a[i][k];
if(dp[i][j] <= val){ //更新dp并记录所分配的公司
dp[i][j] = val;
path[i][j] = k; //path记录该公司所分配的个数
}
}
}
}
printf("%d\n",dp[n][m]);
Print(n,m);
return 0;
}

最新文章

  1. 寻找子域名的IP段
  2. Java——jar命令
  3. jS事件:target与currentTarget区别
  4. POSIX 可移植操作系统接口
  5. [Everyday Mathematics]20150115
  6. leetcode面试准备:Triangle
  7. 【Android - 基础】之Animator属性动画
  8. 安装oracle后,Tomcat 登陆 localhost 要求用户名和密码
  9. POJ 2240 Arbitrage Bellman_ford 判读是否存在正环
  10. Kong(V1.0.2) Health Checks and Circuit Breakers Reference
  11. s6-9 TCP 定时器
  12. Selling Souvenirs CodeForces - 808E (分类排序后DP+贪心)
  13. DL_1_week1_概论
  14. e3.7.2-MyEclipse-10.7安装SVN插件
  15. angular5 基于ngx-translate实现多语言切换
  16. 筛选DataTable中的数据
  17. swift 错误集锦
  18. CentOS 安装 Xamarin官方Mono
  19. ZeroMQZeroMQ研究与应用分析
  20. 使用Sinopia搭建私有npm仓库

热门文章

  1. java实现第七届蓝桥杯寒假作业
  2. java实现第六届蓝桥杯立方体自身
  3. DMR对讲机利用XLX网络联网通信
  4. svg 贝塞尔曲线图解(记录)
  5. sort运用
  6. mysql基础-新版5.7.10源码安装-记录(一)
  7. 聊一聊高并发高可用那些事 - Kafka篇
  8. 简单5步,轻松debug K8S服务!
  9. (六)TestNg中的软断言和硬断言
  10. 从零开始的Spring Boot(5、Spring Boot整合Thymeleaf)