程序存储问题

问题:

设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是i l , 1 ≤i ≤n。程序存储问题要求确定这n 个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。对于给定的n个程序存放在磁带上的长度,编程计算磁带上最多可以存储的程序数。

回答:题目要求计算给定长度的磁带最多可存储的程序个数,先对程序的长度从小到大排序,再采用贪心算法求解。
算法设计:
a. 定义数组a[n]存储n个程序的长度,s为磁带的长度;
b. 调用库函数sort(a,a+n)对程序的长度从小到大排序;
c. 函数most()计算磁带最多可存储的程序数,采用while循环依次对排序后的程序
长度进行累加,用i计算程序个数,用sum计算程序累加长度(初始i=0,sum=0):
① sum=sum+a[i];
② 若sum<=s,i加1,否则i为所求;
③ i=n时循环结束;
d. 若while循环结束时仍有sum<=s,则n为所求。

代码如下:

#include<iostream>
using namespace std;
#include<algorithm>
int a[1000000];

int most(int *a,int n,int s)
{
int i=0,sum=0;
while(i<n)
{
sum=a[i]+sum;
if(sum<=s)
i++;
else return i;
}
return n;
}

int main()
{
int i,n,s;
scanf("%d %d\n",&n,&s);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
printf("%d",most(a,n,s));
return 0;
}

时间: 2024-10-11 13:39:59

程序存储问题的相关文章

Linux程序存储结构与进程结构 堆和栈的差别

摘要:本文主要讲述了Linux系统中.程序存储结构(代码区.数据段和BBS区)与进程的基本结构(代码区.数据段.BBS区.堆和栈).以及堆和栈的差别. Linux程序存储结构与进程结构 1.Linux程序存储结构 在Linux系统下,程序是一个普通的可运行文件,图1是一个Linux下ELF格式可运行文件的基本情况. 图1 ELF格式可运行文件的基本信息 能够看出,此ELF格式可运行文件在存储时,没有调入到内存,分为代码区(text),数据区(data)和为初始化区(bss)3个部分.各段基本说明

Linux程序存储结构与进程结构 堆和栈的区别

摘要:本文主要讲述了Linux系统中,程序存储结构(代码区.数据段和BBS区)与进程的基本结构(代码区.数据段.BBS区.堆和栈),以及堆和栈的区别. Linux程序存储结构与进程结构 1.Linux程序存储结构 在Linux系统下,程序是一个普通的可执行文件,图1是一个Linux下ELF格式可执行文件的基本情况. 图1 ELF格式可执行文件的基本信息 可以看出,此ELF格式可执行文件在存储时,没有调入到内存,分为代码区(text),数据区(data)和为初始化区(bss)3个部分.各段基本说明

FAQs: 我们可以在那里来为我的没有提升管理权限的应用程序存储用户数据?

如果你正在写一个不需要管理员权限的应用程序,如写一个业务线应用(Line of Business,LOB),用户应用程序如游戏,你总是要把应用程序的数据写到一个标准用可以访问的目录.下面列出一些所推荐的需求: l  将每个用户的数据写入: Ø  选择1:FOLDERID_RoamingAppData / System.Environment.SpecialFolder.ApplicationData 用户不会在资源管理器中访问这个目录,关于用户的漫游数据都应该存储在这里.默认的位置在%appda

处理html5离线应用程序存储的一些问题。

manifest方法引入appcache文件,缓存页面,是html5的新特性,通过加载一次,下次自动读取缓存,加载速度快,离线也能加载.缺点就是,被加载的页面会被强制缓存所有的内容. 为了解决不加载所有内容这个问题,经过我反复研究,终于找到了两个解决方案,不多说,看代码. 引入html5离线存储,需要在页面头文件引入.appcache文件,如下: <html lang="zh-CN" manifest="${ctx }/plugins/mobileweb/web/vie

C程序存储结构

使用windows平台MinGW版本的GCC编译器,对以下代码片段进行了编译,探究各个变量在内存中的存储位置: (不同的机器.不同的操作系统的GCC版本可能有差异,因此结论不具有普遍适用性,具体情况需要编译执行此代码自行分析) 代码片段: #include <stdio.h>#include <stdlib.h>int k1 = 1;int k2;static int k3 = 2;static int k4;int main(){  static int m1 = 2, m2; 

Linux进程的睡眠和唤醒

1   Linux进程的睡眠和唤醒 在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状态标志位为TASK_RUNNING.一旦一个运行中的进程时间片用完, Linux内核的调度器会剥夺这个进程对CPU的控制权,并且从运行队列中选择一个合适的进程投入运行. 当然,一个进程也可以主动释放CPU的控制权.函数schedule()是一个调度函数,它可以被一个进程主动调用,从而调度其它进程占用CPU.一旦这个主动放弃CPU的进程被重新调度占用CPU,那么它将从

补基础:自学:计算机科学导论 第五章 计算机组成

计算机的组成部件分为三大类(或子系统): 中央处理器(CPU) 主存储器 输入/输出子系统 5.1 中央处理单元(CPU) 用于数据的运算. CPU又有三个组成部分: 算术逻辑单元(ALU):可对数据进行,逻辑.移位和算数运算 控制单元:控制各个子系统的操作.控制是通过从控制单元发送到其他子系统的信号来进行 寄存器组(快速存储单元):用来临时存放数据的高速独立的存储单元. 1. 数据寄存器     提高运算速度,保存这些运算的中间结果 2. 指令寄存器     CPU从内存中逐条地取出指令,并将

Web.Config文件详解

一).Web.Config是以XML文件规范存储,配置文件分为以下格式    1.配置节处理程序声明      特点: 位于配置文件的顶部,包含在<configSections>标志中.    2.特定应用程序配置      特点:  位于<appSetting>中. 可以定义应用程序的全局常量设置等信息.    3.配置节设置      特点:  位于<system.Web>节中,控制Asp.net运行时的行为.    4.配置节组      特点:  用<se

马哥第3期运维班第一周作业

1.描述计算机的组成及其功能. 控制器(Control): 是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序.数据.地址,协调计算机各部分工作及内存与外设的访问等. 运算器(Datapath): 运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理. 存储器(Memory): 存储器的功能是存储程序.数据和各种信号.命令等信息,并在需要时提供这些信息. 输入(Input system): 输入设备是计算机的重要组成部分,输入设备与输出设备