当前位置: 首页 > article >正文

594: Maximum Tape Utilization Ratio

解法:

对于该题有以下错误(敬希评论区指正

1.dp定义在全局会wa

struct node {
    int count;  // 当前容量下能够存储的程序数量
    int sum;    // 当前容量下所占用的磁带长度
    vector<int> path;  // 当前容量下选择的程序的路径(存放的程序长度)
}dp[N];

2.不取等于情况会wa

dp[j].sum < dp[j - a[i]].sum + a[i])

3.正序遍历程序会wa

for (int i = 0; i < n; i++)

代码:

#include<bits/stdc++.h>
using namespace std;

const int N = 1e4;  // 定义一个常量 N,最大可能的磁带容量大小

int a[N];  // 存储每个程序占用的磁带长度

// 定义一个结构体 node,存储每个容量下的状态
struct node {
    int count;  // 当前容量下能够存储的程序数量
    int sum;    // 当前容量下所占用的磁带长度
    vector<int> path;  // 当前容量下选择的程序的路径(存放的程序长度)
};

int main() {
    int n, m;
    cin >> n >> m;  // 输入程序的数量 n 和磁带的容量 m
    node dp[N];  // dp 数组,用于存储每个磁带容量下的状态

    // 输入每个程序占用的磁带长度
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    // 遍历程序,采用逆序遍历程序
    for (int i = n - 1; i >= 0; i--) {  // 逆序遍历程序,确保每个程序只被选择一次
        // 遍历每个可能的磁带容量,从大到小
        for (int j = m; j >= a[i]; j--) {  // 逆序遍历容量,确保不会重复使用程序
            // 如果选择程序 i 后,存储的程序数更多,或者程序数相同但占用磁带长度更小
            if (dp[j].count < dp[j - a[i]].count + 1 || 
                (dp[j].count == dp[j - a[i]].count + 1 && dp[j].sum <= dp[j - a[i]].sum + a[i])) {
                // 更新 dp[j]:增加程序数量、更新占用的磁带长度和路径
                dp[j].count = dp[j - a[i]].count + 1;  // 更新当前容量 j 下的程序数
                dp[j].sum = dp[j - a[i]].sum + a[i];  // 更新当前容量 j 下的磁带长度
                dp[j].path = dp[j - a[i]].path;  // 继承先前的路径
                dp[j].path.push_back(a[i]);  // 将当前程序加入路径
            }
        }
    }

    // 输出结果:最大存储程序数和最大利用率的磁带长度
    cout << dp[m].count << " " << dp[m].sum << endl;

    // 输出存放在磁带上的每个程序的长度
    for (int i = dp[m].path.size() - 1; i >= 0; i--) {
        cout << dp[m].path[i] << " ";  // 按照逆序输出选中的程序长度
    }
}

解法二:

case1:程序总消耗内存<=磁带长度,输出总程序数,程序总消耗内存

case2:程序总消耗内存>磁带长度,

        1.保证存储最多程序:从小到大依次加入sum直至sum+L[i]>磁带长度

        2.在两侧数组中各选一个交换,交换后得到的磁带长度-sum是最小的


http://www.kler.cn/a/457934.html

相关文章:

  • netcat和nmap的区别
  • C++ 设计模式:桥接模式(Bridge Pattern)
  • imgproxy图像处理的高效与安全
  • 语言模型评价指标
  • Android笔试面试题AI答之Android基础(5)
  • stm32系列MCU介绍
  • 4.FPGA如何实现设计
  • 动态规划四——子序列系列
  • 回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归预测
  • 基于Qt中QMessageBox类的登陆界面对话框应用
  • springBoot使用groovy脚本
  • vulnhub靶场【Hotwarts】之Dobby
  • 基于NLP的医学搜索相关性判断
  • 【MySQL -- 安装】Ubuntu下安装MySQL
  • AE/PR智能视频变速补帧插帧慢动作插件 Aescripts SpeedX v1.2.0.1 Win/Mac
  • 编译原理学习笔记——CH7-Runtime Environments运行时环境
  • Hive刷分区MSCK
  • docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
  • 鸿蒙开发(24)LocalStorage:页面级UI状态存储和AppStorage:应用全局的UI状态存储
  • K8S中,pod的创建流程