Day4 备战CCF-CSP练习
题目描述
有若干个任务需要在一台机器上运行。
它们之间没有依赖关系,因此可以被按照任意顺序执行。
该机器有两个 CPU
和一个 GPU
。
对于每个任务,你可以为它分配不同的硬件资源:
在单个 CPU
上运行。
在两个 CPU
上同时运行。
在单个 CPU
和 GPU
上同时运行。
在两个 CPU
和 GPU
上同时运行。
一个任务开始执行以后,将会独占它所用到的所有硬件资源,不得中断,直到执行结束为止。
第 \(i\) 个任务用单个 CPU
,两个 CPU
,单个 CPU
加 GPU
,两个 CPU
加 GPU
运行所消耗的时间分别为 \(a_i,b_i,c_i\) 和 \(d_i\)。
现在需要你计算出至少需要花多少时间可以把所有给定的任务完成。
输入格式
输入的第一行只有一个正整数 \(n\),是总共需要执行的任务个数。
接下来的 \(n\) 行每行有四个正整数 \(a_i,b_i,c_i,d_i\),以空格隔开。
输出格式
输出只有一个整数,即完成给定的所有任务所需的最少时间。
数据范围
\(1≤n≤40,1≤a_i,b_i,c_i,d_i≤10\)
输入样例:
3
4 4 2 2
7 4 7 4
3 3 3 3
输出样例:
7
样例解释
有很多种调度方案可以在 \(7\) 个时间单位里完成给定的三个任务,以下是其中的一种方案:
同时运行第一个任务(单 CPU
加上 GPU
)和第三个任务(单 CPU
),它们分别在时刻 \(2\) 和时刻 \(3\) 完成。
在时刻 \(3\) 开始双 CPU
运行任务 \(2\),在时刻 \(7\) 完成。
题目分析
\(dp\)
思路尚不正确,有待优化
\(dp(i , j , k)\) 表示CPU1
时间为\(i\),CPU2
时间为\(j\),GPU
时间为\(k\)的完成任务个数
C++代码
60分
#include <bits/stdc++.h>
using namespace std;
const int N = 50 , M = 220;
int n , m;
int a[N] , b[N] , c[N] , d[N];
int dp[M][M][M];
int main()
{
cin >> n;
int m1 = 0 , m2 = 0;
for(int i = 1 ; i <= n; i ++)
{
cin >> a[i] >> b[i] >> c[i] >> d[i];
if(i % 2) m2 += a[i];
else m1 += a[i];
}
m = max(m1 , m2);
for(int i = 1 ; i <= n ; i ++)
for(int j = m ; j >= 0 ; j --)
for(int k = m ; k >= 0 ; k --)
for(int l = m ; l >= max(j , k) ; l --)
{
// CPU1
if(j >= a[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j - a[i]][k][l] + 1);
// CPU2
if(k >= a[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j][k - a[i]][l] + 1);
// CPU1 + CPU2
if(j >= b[i] && k >= b[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j - b[i]][k - b[i]][l] + 1);
// CPU1 + GPU
if(j >= c[i] && l >= c[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j - c[i]][k][l - c[i]] + 1);
// CPU2 + GPU
if(k >= c[i] && l >= c[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j][k - c[i]][l - c[i]] + 1);
// CPU1 + CPU2 + GPU
if(k >= d[i] && l >= d[i] && j >= d[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j - d[i]][k - d[i]][l - d[i]] + 1);
}
int res = m;
for(int j = 0 ; j <= m ; j ++)
for(int k = 0 ; k <= m ; k ++)
for(int l = 0 ; l <= m ; l ++)
if(dp[j][k][l] == n)
res = min(res , max(j , max(k , l)));
cout << res << '\n';
return 0;
}
50分
#include <bits/stdc++.h>
using namespace std;
const int N = 50 , M = 210;
int n , m;
int a[N] , b[N] , c[N] , d[N];
int dp[M][M][M];
int main()
{
cin >> n;
for(int i = 1 ; i <= n; i ++)
{
cin >> a[i] >> b[i] >> c[i] >> d[i];
m += a[i];
}
m /= 2;
for(int i = 1 ; i <= n ; i ++)
for(int j = m ; j >= 0 ; j --)
for(int k = m ; k >= 0 ; k --)
for(int l = max(j , k) ; l >= 0 ; l --)
{
// CPU1
if(j >= a[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j - a[i]][k][l] + 1);
// CPU2
if(k >= a[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j][k - a[i]][l] + 1);
// CPU1 + CPU2
if(j == k && j >= b[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j - b[i]][k - b[i]][l] + 1);
// CPU1 + GPU
if(j == l && j >= c[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j - c[i]][k][l - c[i]] + 1);
// CPU2 + GPU
if(k == l && k >= c[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j][k - c[i]][l - c[i]] + 1);
// CPU1 + CPU2 + GPU
if(k == l && j == k && k >= d[i]) dp[j][k][l] = max(dp[j][k][l] , dp[j - d[i]][k - d[i]][l - d[i]] + 1);
}
int res = m;
for(int j = 0 ; j <= m ; j ++)
for(int k = 0 ; k <= m ; k ++)
for(int l = 0 ; l <= m ; l ++)
if(dp[j][k][l] == n)
res = min(res , max(j , max(k , l)));
cout << res << '\n';
return 0;
}
Day4 备战CCF-CSP练习的更多相关文章
- CCF CSP 认证
参加第八次CCF CSP认证记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四 ...
- CCF CSP 201609-2 火车购票
题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...
- CCF CSP 201703-3 Markdown
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...
- CCF CSP 201703
CCF CSP 2017·03 做了一段时间的CCF CSP试题,个人感觉是这样分布的 A.B题基本纯暴力可满分 B题留心数据范围 C题是个大模拟,留心即可 D题更倾向于图论?(个人做到的D题基本都是 ...
- CCF CSP 201312-3 最大的矩形
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...
- CCF CSP 201609-3 炉石传说
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...
- CCF CSP 201403-3 命令行选项
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...
- CCF CSP 201709-4 通信网络
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...
- CCF CSP 201409-3 字符串匹配
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...
- CCF CSP 201503-3 节日
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-3 节日 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形 ...
随机推荐
- 搞定 XLSX 预览?别瞎找了,这几个库(尤其最后一个)真香!
- Hey, 我是 沉浸式趣谈 - 本文首发于[沉浸式趣谈],我的个人博客 **https://yaolifeng.com** 也同步更新. - 转载请在文章开头注明出处和版权信息. - ...
- Mastik:微体系结构侧信道攻击工具包
1. 引言 微体系结构侧通道攻击利用了处理器内部组件的竞争,从而泄漏了进程之间的信息.虽然从理论上讲这类攻击很简单,但实际的实现方式往往很复杂,并且需要对文献记载不充分的处理器函数和其他领域专有的知识 ...
- .NET AI Preview 2 发布:支持 Aspire 与 Qdrant 向量库集成,加速云原生 AI 开发
引言 随着人工智能(AI)技术的迅猛发展,开发者对简单.高效的AI开发工具需求日益增加.微软 .NET 团队最近发布了 .NET AI 模板的 Preview 2 版本,这一更新为开发者带来了诸多令人 ...
- 45分钟从零搭建私有MaaS平台和生产级的Qwen3模型服务
今天凌晨,阿里通义团队正式发布了 Qwen3,涵盖六款 Dense 模型(0.6B.1.7B.4B.8B.14B.32B)和两款 MoE 模型(30B-A3B 和 235B-A22B).其中的旗舰模型 ...
- Java---switch...case中case可以匹配些什么
switch-case语句 case 标签可以是 : •类型为 char.byte.short 或 int 的常量表达式. •枚举常量. •从 Java SE 7 开始,case 标签还可以是字符串字 ...
- 【HUST】网安|多媒体数据安全实验|LSB隐写和DCT域JSTEG+F4+F5隐写及检测
文章目录 LSB空域隐写 原理 值对现象原理 实验内容 DCT域隐写 JSteg F4 F5 代码仓库:代码.嵌入提取使用的图像.jpeg_tool库.实验报告_Gitee. 实验环境:MATLAB ...
- 操作系统综合题之“采用记录型信号量机制实现进程INPUT、PROCESS和OUTPUT的同步算法(代码补充)”
1.问题:系统中有有三个进程INPUT.PROCESS和OUTPUT,共用两个缓冲区BUF1和BUF2.假期设BUF1中最多可放10个数据,现已放入了2个数据:BUF2最多可放5个数据.INPUT进程 ...
- SQL 强化练习 (四)
继续每日一练 sql 肯定会无敌强的后面. 恰好今天项目弄报表这块, 用了国产的 BI 工具, 帆软Report, 除了页面控件做得有些 low 外, 我感觉其他各方面都特别适合做 中国式的报表. 明 ...
- 为Java虚拟机分配堆内存大于机器物理内存会怎么样?
之前在某个地方看到的一个问题,"如果为Java虚拟机指定的堆内存大于物理内存会怎么样?",今天正好又看到了HotSpot VM中关于为堆分配内存的源代码实现,顺便从源代码角度解答一 ...
- Node v18.6 发布的这个新特性未来可能改变前端工程化
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...