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

P2392 kkksc03考前临时抱佛脚(动态规划)

题目背景

kkksc03 的大学生活非常的颓废,平时根本不学习。但是,临近期末考试,他必须要开始抱佛脚,以求不挂科。

题目描述

这次期末考试,kkksc03 需要考 4 科。因此要开始刷习题集,每科都有一个习题集,分别有 s1​,s2​,s3​,s4​ 道题目,完成每道题目需要一些时间,可能不等(A1​,A2​,…,As1​​,B1​,B2​,…,Bs2​​,C1​,C2​,…,Cs3​​,D1​,D2​,…,Ds4​​)。

kkksc03 有一个能力,他的左右两个大脑可以同时计算 2 道不同的题目,但是仅限于同一科。因此,kkksc03 必须一科一科的复习。

由于 kkksc03 还急着去处理洛谷的 bug,因此他希望尽快把事情做完,所以他希望知道能够完成复习的最短时间。

输入格式

本题包含 5 行数据:第 1 行,为四个正整数 s1​,s2​,s3​,s4​。

第 2 行,为 A1​,A2​,…,As1​​ 共 s1​ 个数,表示第一科习题集每道题目所消耗的时间。

第 3 行,为 B1​,B2​,…,Bs2​​ 共 s2​ 个数。

第 4 行,为 C1​,C2​,…,Cs3​​ 共 s3​ 个数。

第 5 行,为 D1​,D2​,…,Ds4​​ 共 s4​ 个数,意思均同上。

输出格式

输出一行,为复习完毕最短时间。

输入输出样例

输入 #1

1 2 1 3		
5
4 3
6
2 4 3

输出 #1

20

说明/提示

1≤s1​,s2​,s3​,s4​≤20。

1≤A1​,A2​,…,As1​​,B1​,B2​,…,Bs2​​,C1​,C2​,…,Cs3​​,D1​,D2​,…,Ds4​​≤60。

思考:

由于我们只能一科一科的完成,所以我们只需要将每一科的最小完成时间相加就行。

针对每一科,由于可以两道题目一起思考,所以理想情况是左脑和右脑均思考总时间(Sum)的一半。

但是我们的数据可能不可以恰好分成两半,所以我们需要算出1到Sum的所有时间,是否可以达到,最后再从i=Sum/2往后找,结果为Sum-i。

算所有时间是否可以达到,我们可以使用01背包动态的去计算。

#include<bits/stdc++.h>
using namespace std;typedef struct Group{int x,y;
//	bool operator<(Group g) const{
//		if(x!=g.x) return x<g.x;
//		else return y<g.y;
//	}	
}G;
typedef long long ll;
const int mod = 1e6+7;
int n,m;
int r,c;
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};int solve(vector<int>& nums){int sz = nums.size();int sum = 0;for(int i=1; i<sz; i++) sum+=nums[i];vector<bool> dp(sum+1,false);dp[0] = true;for(int i=1; i<sz; i++){for(int j=sum; j>=nums[i]; j--){if(dp[j-nums[i]]) dp[j] = true;}}int end = sum/2;for(int i=end; i>=0; i--){if(dp[i]) return sum-i;}
}int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int s1,s2,s3,s4;cin>>s1>>s2>>s3>>s4;vector<int> A(s1+1,0);vector<int> B(s2+1,0);vector<int> C(s3+1,0);vector<int> D(s4+1,0);for(int i=1; i<=s1; i++) cin>>A[i];for(int i=1; i<=s2; i++) cin>>B[i];for(int i=1; i<=s3; i++) cin>>C[i];for(int i=1; i<=s4; i++) cin>>D[i];int res = solve(A)+solve(B)+solve(C)+solve(D);cout<<res<<endl;return 0;
}

http://www.dtcms.com/a/265980.html

相关文章:

  • 纯前端批量下载
  • Python 爬虫实战 | 国家医保
  • MySQL 8.0 OCP 1Z0-908 题目解析(16)
  • Part 0:射影几何,变换与估计-第三章:3D射影几何与变换
  • 爬虫经验分享:淘宝整店商品爬取全过程|API接口实战
  • 【数据结构】 map 和 set
  • stm32第十三天串口发送数据
  • 从0到1实战!用Docker部署Qwerty Learner输入法的完整实践过程
  • Dijkstra 算法#图论
  • MySQL JSON数据类型完全指南:从版本演进到企业实践的深度对话
  • Windows 上使用 vscode + mingw 调试 python 程序
  • 国内MCP服务平台推荐!aibase.cn上线MCP服务器集合平台
  • 二叉树的右视图C++
  • MySQL的窗口函数介绍
  • 每日算法刷题Day41 6.28:leetcode前缀和2道题,用时1h20min(要加快)
  • golang json omitempty 标签研究
  • 图论基础算法入门笔记
  • OOM电商系统订单缓存泄漏,这是泄漏还是溢出
  • 免费一键自动化申请、续期、部署、监控所有 SSL/TLS 证书,ALLinSSL开源免费的 SSL 证书自动化管理平台
  • 【进阶篇-消息队列】——RocketMQ如何实现事务的
  • HarmonyOS ArkTS卡片堆叠滑动组件实战与原理详解(含源码)
  • 如何挖掘客户的隐性需求
  • 474. 一和零
  • 【华为od刷题(C++)】HJ22 汽水瓶
  • ubuntu22 桌面版开启root登陆
  • ubuntu22.04安装anaconda
  • embbding you should know
  • 独立开发者软件出海:如何用Semrush高效洞察与增长
  • 【Note】《深入理解Linux内核》Chapter 10 :Linux 内核中的系统调用机制全解析
  • 贝叶斯深度学习:赋予AI不确定性感知的认知革命