1266:【例9.10】机器分配

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 6867     通过数: 3370

【题目描述】

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

【输入】

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

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

【输出】

第一行输出最大盈利值;

接下N行,每行有2个数,即分公司编号和该分公司获得设备台数。

【输入样例】

3 3           //3个分公司分3台机器
30 40 50
20 30 50
20 25 30

【输出样例】

70                                         //最大盈利值为70
1 1                                        //第一分公司分1台
2 1                                        //第二分公司分1台
3 1                                        //第三分公司分1台

【分析】

按照公司的顺序来分配机器,即按照公司的顺序划分阶段,第一个阶段把 m 台设备分给第一个公司,记录下来获得的各个盈利值,然后把 m 台设备分给前两个公司,和第一个阶段比较记录下来更优的各个盈利值,一直到第 n 个阶段把 m台机器全部分给了n个公司,就可以得到最优解,下面来讨论两个阶段之间的关系,设数组 f[i][j]表示前 i 个公司分配 j 台机器的最大盈利,数组 f[i-1][k]表示前 i-1 个公司分配 K 台机器的最大盈利(1<=i<=n,1<=j<=m,0<=k<=j),用value[i][j]表示第 i 个公司分配 j 台机器的盈利,则 f[i][j]可以由下面的式子中取最大值获得∶
        f[i-1][0]+value[i][j]       //前 i-1 公司分配 0 台机器最大盈利+第 1 个公司分配 j 台的机器的盈利

f[i-1][1]+value[i][j-1]    //前 i-1 公司分配 1 台机器最大盈利+第 1 个公司分配 j-1 台的机器的盈利

f[i-1][2]+value[1][j-2]   //前 i-1 公司分配 2 台机器最大盈利+第 1 个公司分配 j-2 台的机器的盈利

f[i-1][j-1]+value[i][1]    //前 i-1 公司 j-1 分配台机器最大盈利+第 1 个公司分配 1 台的机器的盈利

f[i-1][j]+value[i][0]      //前 i-1 公司分配 j 台机器最大盈利+第 1 个公司分配 0 台的机器的盈利
        在这里用机器数用做每个阶段的状态,由于 value[1][j]的值为定值,要使前面每个式子的值最大,就必须使第 i-1 阶段的各个状态的值最大,阶段 i 的状态只能由阶段 i-1 中的状态通过状态转移方程求得,与其他状态没有关系。由此可见,该问题具备了最优子结构和无后效性原则,适宜使用动态程序设计方法求解。

状态转移方程为∶f[i][j]= max { f[i-1][K] + value[i][j-k] }  (1<=i<=n,1<=j<=m, 0<=k<=j)
初始值∶f[0][0]=0,f[n][m]的值即为所求最大盈利值。

【参考代码】

#include <stdio.h>
int max1;
int f[11][20],value[11][20];
int show(int i,int j)
{int k;if(i==0)return 0;for(k=0;k<=j;k++){if(max1==f[i-1][k]+value[i][j-k])  // 递归求各公司分配的机器数量 {max1=f[i-1][k];show(i-1,k);printf("%d %d\n",i,j-k);break;}}
}
int main()
{int m,n,i,j,k;scanf("%d%d",&n,&m);for(i=1;i<=n;i++)for(j=1;j<=m;j++)scanf("%d",&value[i][j]);for(i=1;i<=n;i++)for(j=1;j<=m;j++){max1=0;for(k=0;k<=j;k++){if(f[i-1][k]+value[i][j-k]>max1)max1=f[i-1][k]+value[i][j-k];}f[i][j]=max1;}printf("%d\n",f[n][m]);   // 输出最大盈利值 show(n,m);                // 输出分配情况 return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1266

信息学奥赛一本通(1266:【例9.10】机器分配)相关推荐

  1. 信息学奥赛一本通——2062:【例1.3】电影票

    2062:[例1.3]电影票 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 57341     通过数: 34230 [题目描述] 已知一位小朋友的电影票价是10 ...

  2. 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制

    [题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...

  3. 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)

    [题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...

  4. 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02

    /* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...

  5. 【例8】合唱队形(《信息学奥赛一本通第五版》)

    /* [例8]合唱队形(<信息学奥赛一本通第五版>) http://ybt.ssoier.cn:8088/problem_show.php?pid=1264 [问题描述] N位同学站成一排 ...

  6. 信息学奥赛一本通 2021:【例4.6】最大公约数

    [题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...

  7. 信息学奥赛一本通(2032:【例4.18】分解质因数)

    2032:[例4.18]分解质因数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 582     通过数: 376 [题目描述] 把一个合数分解成若干个质因数乘积 ...

  8. 信息学奥赛一本通C++语言-----2036:【例5.3】开关门

    [题目描述] 宾馆里有n(2≤n≤1000)n(2≤n≤1000) 个房间,从1∼n1∼n 编了号.第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是22 的倍数的房间"相反处理& ...

  9. 信息学奥赛一本通——2068:【例2.6】鸡兔同笼

    大家好(๑╹◡╹)ノ" 这里是小蒟蒻 一天没更新了呢! 今天给大家带来<信息学奥赛一本通--2068:[例2.6]鸡兔同笼> 题目: 2068:[例2.6]鸡兔同笼 时间限制: ...

  10. 信息学奥赛一本通C++语言-----2048:【例5.18】串排序

    [题目描述] 对给定的n(1≤n≤20)n(1≤n≤20)个国家名(国家名字长度不超过2020),按其字母的顺序输出. [输入] 第一行为国家的个数nn: 以下nn行为国家的名字. [输出] nn行, ...

最新文章

  1. 语义分割--Dilated Residual Networks 之转载
  2. React.js 小书 Lesson14 - 实战分析:评论功能(一)
  3. 如何在3个月内拥有3年的工作经验
  4. 从一个登录页面浅淡MVVM(二)
  5. Android之shape属性简介和使用
  6. aftershokz蓝牙搜不到_iphone xr黑屏无法开机怎么办?iphonexr蓝牙连不上怎么办?
  7. SQLHelp sql数据库的DAL
  8. IDEA插件开发实战
  9. QCC蓝牙芯片PIO操作
  10. 设备划分冲突域和广播域
  11. CSPS-S 模拟47
  12. 实战VMware虚拟机下使用海蜘蛛软路由
  13. python编写游戏测试机器人客户端(四)
  14. 苹果笔记本有uefi启动吗_如何更换Windows 10的启动logo
  15. LaTex使用技巧19:罗马数字输入(大写和小写)
  16. CQUPT WEEKLY TRAINING (3)解题报告
  17. 何以解忧,唯有暴富,2019再见
  18. 设计模式读书笔记-----抽象工厂模式
  19. postman断言--数据比对
  20. 机器人工程师之路——从大一到研究生,YY硕经验谈

热门文章

  1. servlet乱码问题
  2. 报表服务扩展:基于WCF技术的报表服务扩展
  3. ASP.NET中实现MSN通知消息功能
  4. “三行代码,确实需要耗上一整天!”
  5. 中国最大字幕组“人人影视”凉了!警方通报:因盗版视频14人被抓
  6. 陆奇:疫情后将出现哪些创业新机会?
  7. 漫画:学习中台,看这篇就够了
  8. Oracle提供的序号函数
  9. RedHat系列软件管理(第二版) --脚本安装
  10. 概述嵌入式设备驱动,教你怎么“玩”转嵌入式开发