题目

设有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. 太牛逼了!项目中用了Disruptor之后,性能提升了2.5倍
  2. 知识驱动的推荐系统:现状与展望
  3. 推荐几款不错的写作利器
  4. 【代码托管】如何使用Git工具托管本地代码到GitHub(也许是最简单易懂的图文教程)【含 Git+第三方工具TortoiseGit+中文语言包 百度云盘资源】
  5. Cisco Nexus 1000V
  6. 判断表达式值是否为空_如何在 Python 中判断列表是否为空
  7. Linux Software RAID的rebuild速度。
  8. Java学习日报—SQL基础—2021/11/29
  9. 硬件开源为什么如此之难?
  10. 浅谈 js 正则字面量 与 new RegExp 执行效率
  11. 问题五十四:怎么用ray tracing画参数方程表示的曲面(2)—— bezier surface
  12. tomcat7官网下载
  13. 推荐克莱夫·汤普森《天才程序员》
  14. ip扫描命令 linux,如何使用Linux扫描网络上的IP地址
  15. Mixly第三方自定义用户库实现
  16. android 时钟动态图标,神奇的Android动态时钟/时间UI界面
  17. 计算机桌面亮度调节,电脑屏幕亮度怎么调?笔记本屏幕亮度调节方法图解教程 电脑维修技术网...
  18. 看了这篇文章,再也不用纠结该选OV证书还是EV证书了
  19. 如何用python整理表格_Python 自动整理 Excel 表格
  20. iPhone手机数据找回指南2:iPhone手机使用技巧

热门文章

  1. linux df命令none,linux磁盘命令中df命令的作用
  2. 怎么选最快dns服务器,如何可以选择适合自己的最快的DNS服务器?
  3. Rtools安装步骤,快速高效!
  4. 2017上半年技术文章集合【Android】—184篇文章分类汇总
  5. 联想携手北京华联打造智慧商城 | Face++完成4.6亿美元C轮融资【软件网每日新闻播报│第11-1期】
  6. 小蜜蜂轻易破解数学大难题“旅行商问题”
  7. 听说:用过这几个网站的程序员,早已领先身边人一大截!
  8. 大学计算机 信息编码与数据表示什么意思,大学计算机之-计算机中信息编码ppt课件...
  9. 数值 ELO算法教程
  10. 心电监护仪、呼吸机、超声电机