洛谷 P2392 kkksc03考前临时抱佛脚 刷题笔记 dfs

P2392 kkksc03考前临时抱佛脚 - 洛谷 | 计算机科学教育新生态

题目分析

左右脑双核

当我们给左右脑各自分配一道题时

消耗的时间为两者中耗时较长的一道题

我们尝试把每一道题都分配给左右脑试一试 即可遍历所有答案

关键在于答案怎么取保证耗时最短

if(step>ax){//当我们得到一个分配好的方案时

minv=min(minv,max(l,r));//Min函数内比较的是当前最短耗时 和max函数的结果

//max函数的结果是当前的实际耗时 即左右脑中耗时较长的一个

return ;

}

那么为什么当分配完直接比较左右脑总时长大小即可呢

考虑例子

1 2 3 9

显然最短时间为

左脑 1 2 3

右脑 9

实际效果和

例子

6 9

是一样的

所以我们可以把一道题直接加给左脑或者右脑

等所有的题目分配完毕直接比较两个脑子的总时间 取时间较长的作为答案

完整代码

#include<bits/stdc++.h>

using namespace std;

int a5;//记录每科的题目数量

int b521;//记录每道题目的时间

const int INF = 0x3f3f3f3f;//1061109567,是10^9级别

int l,r,minv,ans;

void dfs(int x,int step){

if(step>ax){

minv=min(minv,max(l,r));//取所有时间里的最小值

return ;

}

l += bxstep;//将题目分配给左脑

dfs(x,step+1);//分配下一道 题目

l -= bxstep;//回溯

r += bxstep;

dfs(x,step+1);

r -= bxstep;

}

int main(){

for(int i = 1 ;i <= 4;i++){

cin>>ai;

}

for(int i = 1;i <= 4;i++){

for(int j = 1;j <= ai;j++){

cin>>bij;

}

l = 0;

r = 0;

minv = INF;

dfs(i,1);

ans+=minv;

}

cout<<ans;

return 0;

}

相关推荐
Zhao-Jichao2 小时前
AI Prompting for Everyone 课程笔记 - P21 总结 Conclusion
人工智能·笔记
欢欢李2 小时前
【LTE L3 笔记 05】LTE同步信号
笔记·无线通信·物理层·lte·空口协议
La Pulga4 小时前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蒸蒸yyyyzwd4 小时前
秋招学习笔记 day106
笔记·学习
小李不想当小白5 小时前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
欢欢李6 小时前
【LTE L3 笔记 04】LTE帧结构
笔记·无线通信·物理层·lte·空口协议
Zhao-Jichao8 小时前
AI Prompting for Everyone 课程笔记 - P20 实验与期末项目 Lab and Final Project
前端·人工智能·笔记
Z21-X9 小时前
云原生运维实战笔记:企业网站综合上云部署与云运维服务全景解析
运维·笔记·学习·云原生
坤坤子吖9 小时前
Linux网络编程:UDP进阶,从字典服务器到简单聊天室
linux·服务器·网络·c++·笔记·学习
Rabitebla9 小时前
【Linux学习笔记】进程篇(九):进程的创建与退出——fork、写时拷贝与退出码
linux·c++·笔记·学习