题目

设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是li ,1 < = i < = n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。在保证存储最多程序的前提下还要求磁带的利用率达到最大。 对于给定的n个程序存放在磁带上的长度,编程计算磁带上最多可以存储的程序数和占用磁带的长度。

输入

第一行是2 个正整数,分别表示文件个数n <=600和磁带的长度L<=6000。
接下来的1 行中,有n个正整数,表示程序存放在磁带上的长度。

输出

第1 行输出最多可以存储的程序数和占用磁带的长度;
第2行输出存放在磁带上的每个程序的长度。

样例输入

9 50
2 3 13 8 80 20 21 22 23

样例输出

5 49
2 3 13 8 23

思路

我们开一个结构体存三个信息:可存程序个数,磁带占用长度,所有的程序

  • dp[j].count 表示磁带长度为j最多可以存的程序的个数
  • dp[j].sumv 表示磁带长度为j最多可以占用的磁带长度
  • dp[j].pre 表示存了count个程序的每个程序占用的磁带长度

首先我们要满足储存的程序数最多那么如果满足:dp[j].count < dp[j - s].count + 1,可更新数据。
当储存程序相同的时候,我们需要满足:dp[j].sumv <= (dp[j - s].sumv + s),即程序数目相同的情况下,需要最大的磁带占用率,如果满足更新数据。

代码

#include<bits/stdc++.h>using namespace std;struct node
{     int count;//程序数目     int sum;//程序所占的长度     vector<int>pre;//count个程序     node()     {          count=0;          sum=0;          pre.clear();     }
}dp[6005];
int main()
{     int n,m,l[605];     cin>>n>>m;     for(int i=0;i<n;i++)         cin>>l[i];     //要倒叙,因为是用的栈     for(int i=n-1;i>=0;i--)    {         int k=l[i];        for(int j=m;j>=0;j--)         {            if(j-k>=0)             {                if(dp[j].count<dp[j-k].count+1||dp[j].count==dp[j-k].count+1&&dp[j].sum<=dp[j-k].sum+k)                 {                     dp[j].count=dp[j-k].count+1;                     dp[j].sum=dp[j-k].sum+k;                     dp[j].pre=dp[j-k].pre;                     dp[j].pre.push_back(k);                 }             }         }     }     cout<<dp[m].count<<' '<<dp[m].sum<<endl;     for(int i=dp[m].pre.size()-1;i>0;i--)     {         cout<<dp[m].pre[i]<<' ';}cout<<dp[m].pre[0]<<endl;
}

Maximum Tape Utilization Ratio相关推荐

  1. swust594 Maximum Tape Utilization Ratio

    Maximum Tape Utilization Ratio  1000(ms)  65535(kb)  819 / 2662 Tags: 贪婪策略 设有n 个程序{1,2,-, n }要存放在长度为 ...

  2. Swustoj(594)Maximum Tape Utilization Ratio(最容易懂的题解)

    Maximum Tape Utilization Ratio  1000(ms)  65535(kb)  917 / 3074 Tags: 贪婪策略 设有n 个程序{1,2,-, n }要存放在长度为 ...

  3. SWUST OJ 之 0594 Maximum Tape Utilization Ratio

    题目 设有n 个程序{1,2,-, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是li ,1 < = i < = n. 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, ...

  4. SWUST OJ 594: Maximum Tape Utilization Ratio

    题目描述 设有n 个程序{1,2,-, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是li ,1 < = i < = n. 程序存储问题要求确定这n 个程序在磁带上的一个存储方 ...

  5. ACM-Maximum Tape Utilization Ratio

    题目描述:Maximum Tape Utilization Ratio Tags: 贪婪策略 设有n 个程序{1,2,-, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是li ,1 < ...

  6. 【动态规划】磁带问题

    Maximum Tape Utilization Ratio 1000(ms) 65535(kb) 956 / 3237 Tags: 贪婪策略 设有n 个程序{1,2,-, n }要存放在长度为L的磁 ...

  7. 控制网络技术(英文二)

    控制网络技术(英文二)Data communication base 一.Theoretical basis 1.basis (1)Fourier Analysis (2)Bandwidth-Limi ...

  8. Dalvik虚拟机垃圾收集(GC)过程分析

    前面我们分析了Dalvik虚拟机堆的创建过程,以及Java对象在堆上的分配过程.这些知识都是理解Dalvik虚拟机垃圾收集过程的基础.垃圾收集是一个复杂的过程,它要将那些不再被引用的对象进行回收.一方 ...

  9. 【MEC笔记-概述 】MEC

    参考出处:https://blog.csdn.net/weixin_43502661/article/details/89228324 论文名:A Survey on Mobile Edge Comp ...

最新文章

  1. @OneToMany
  2. linux下软件安装与yum源码库的设置
  3. 8,协议序列化组件NewLife.Serialization
  4. 【数字智能三篇】之一: 一页纸说清楚“什么是大数据”
  5. 全球及中国汽车空调冷凝器行业发展前景规模及投资战略决策报告2022-2027年
  6. 20211124 自动化学科领域高质量技期刊分级目录(控制理论与控制工程)
  7. MySQL高级 - 锁 - MyISAM表锁 - 小结
  8. 【Hadoop Summit Tokyo 2016】Spark上可扩展的深度学习
  9. 全国计算机等级考试题库二级C操作题100套(第19套)
  10. 前端:常用的meta标签总结
  11. 【转】Linux C动态内存泄漏追踪方法
  12. 图像处理基础(二)_OpenCV命名规则
  13. 2017.11.21 MS Power BI training
  14. 杨校老师课堂之Hadoop环境搭建(一)
  15. Neo4j下载安装教程
  16. 一张图告诉你,自学编程和科班程序员的差别在哪!网友:很真实
  17. 《众妙之门——网页排版设计制胜秘诀》——导读
  18. 促销方式脑图(转载图灵学院)
  19. 不能忘记陪我们长大的100部电影
  20. 端游与页游之战:微端网游突出重围

热门文章

  1. h5+、mui创建手机APP,华为等手机底部虚拟按键问题
  2. [原创] Microsoft Word 2010 关闭不正常(提示:已停止工作,Windows正在检查该问题的解决方案。。) 问题的解决
  3. 安装Proxmox VE系统报错
  4. 2021-12-13 309
  5. 虹科分析 | 终端安全 | 移动目标防御是“变革性”技术——GARTNER
  6. JAVA801_Lambda表达式的格式、使用前提、省略模式、注意事项、和匿名内部类的区别
  7. PL/SQL中Lpad函数和Rpad函数的用法
  8. 突然发现哥就是一个传奇
  9. 物联网供应商,主要面临哪些安全挑战?
  10. EE302 - Lab 5