P1926、小书童——刷题大军

题目

题目背景

数学是火,点亮物理的灯;物理是灯,照亮化学的路;化学是路,通向生物的坑;生物是坑,埋葬学理的人。 文言是火,点亮历史宫灯;历史是灯,照亮社会之路;社会是路,通向哲学大坑;哲学是坑,埋葬文科生。——小A

题目描述

小A“刷题”十分猖狂,明目张胆地“刷题”。他现在在小书童里发现了n样他喜欢的“题目”,每“题”都有他的需要时间,而老师布置了m项作业,每项作业都有它的需要时间及分值,老师规定k分以上算及格。小A只剩r个单位时间,他想在及格的基础上更多地“刷题”。

输入格式

第一行:n m k r。第二行:n个数,代表每“题”他的需要时间。第三行:m个数。表示每项作业它的需要时间。第四行:m个数。代表每项作业它的分值。

输出格式

一个数,代表小A能刷几道题

输入输出样例

输入 #1复制

3 4 20 100
15 20 50
10 15 40 40
5 5 10 15

输出 #1复制

2

说明/提示

没有不能及格的情况

对于100%的数据,n≤10,m≤10,k≤50,r≤150n\le 10,m\le 10,k\le 50,r\le 150n≤10,m≤10,k≤50,r≤150

思路

这其实就是一道很平常的01背包问题,但是他不太一样的地方是他要进行两次背包。

第一次背包过程中,一旦当前情况的分值已经大于及格分,那么我们就对当前所需时间进行判断,在多次循环后我们求出的就是及格最少要花的时间

那么接下来,我们减去及格要花的最少时间,那么剩下的时间就是允许我们自由刷题的时间了

接着就是最平常的背包了

这里数据范围不大,所以二维dpdpdp应该也是没有问题的

但是我的代码用的是一维dpdpdp,所以能花更少的空间复杂度

大家也最好学一学dpdpdp的状态压缩,以防比赛卡数据呢?

​ tips:tips:tips:一维dpdpdp要注意内循环要反向遍历,而且遍历范围不一样!!!!

代码

package com.lanqiao;import java.util.Scanner;/*** @author 王宇哲**/
public class P1926 {/*** 小A喜欢的题目数量*/static int n;/*** 老师布置的题目数量*/static int m;/*** 老师规定的及格分数*/static int k;/*** 小A剩余的时间*/static int r;/*** 他想要刷的题总共需要的时间*/static int[] requireTimeForLike;/*** 老师规定的作业所需时间*/static int[] requireTimeForOrder;/*** 老师规定的作业的分值*/static int[] scoreForOrder;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);n = scanner.nextInt();m = scanner.nextInt();k = scanner.nextInt();r = scanner.nextInt();requireTimeForLike = new int[n+1];requireTimeForOrder = new int[m+1];scoreForOrder = new int[m+1];for (int i = 1;i <= n;i ++){requireTimeForLike[i] = scanner.nextInt();}for (int i = 1;i <= m;i ++){requireTimeForOrder[i] = scanner.nextInt();}for (int i = 1;i <= m;i ++){scoreForOrder[i] = scanner.nextInt();}//*************求及格的情况下还剩多少时间***************int[] dp = new int[r+1];int minRequireTime = 0xfffffff;for(int i = 1;i<=m;i++){for(int j = r;j>=requireTimeForOrder[i];j--){dp[j] = Math.max(dp[j],dp[j-requireTimeForOrder[i]]+scoreForOrder[i]);//如果花这么久已经及格了,就更新最少需要的时间if(dp[j] > k){minRequireTime = Math.min(minRequireTime,j);}}}//现在开始,剩下的时间都是小A的啦r -= minRequireTime;//*************求最多完成的题目数量********************dp = new int[r+1];for(int i = 1;i <=n ;i++){for(int j=r;j>=requireTimeForLike[i];j--){dp[j] = Math.max(dp[j],dp[j-requireTimeForLike[i]]+1);}}System.out.println(dp[r]);}}

洛古 P1926 小书童——刷题大军相关推荐

  1. P1926 小书童——刷题大军

    题目传送门:https://www.luogu.com.cn/problem/P1926 题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人. 文 ...

  2. P1926 小书童——刷题大军(dp背包(01背包)状态转移方程)

    题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人. 文言是火,点亮历史宫灯:历史是灯,照亮社会之路:社会是路,通向哲学大坑:哲学是坑,埋葬文科生 ...

  3. P1926 小书童——刷题大军 题解

    题目传送门 这道题是求最多能刷几道题. 本道题用贪心的思想,优先作用时少的题目. 在作业及格的基础上,尽可能地多刷题. 先处理作业,每道作业完成 / 没完成 ,用状态压缩 1. 时间够 2.分数够 这 ...

  4. (爱思创题解)小书童——刷题大军

    小书童--刷题大军 题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人. 文言是火,点亮历史宫灯:历史是灯,照亮社会之路:社会是路,通向哲学大坑: ...

  5. AC日记——小书童——刷题大军 洛谷 P1926

    题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人. 文言是火,点亮历史宫灯:历史是灯,照亮社会之路:社会是路,通向哲学大坑:哲学是坑,埋葬文科生 ...

  6. 小书童——刷题大军(洛谷)

    题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人. 文言是火,点亮历史宫灯:历史是灯,照亮社会之路:社会是路,通向哲学大坑:哲学是坑,埋葬文科生 ...

  7. 洛谷P1926-小书童——刷题大军(01背包)

    题目背景: 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人. 文言是火,点亮历史宫灯:历史是灯,照亮社会之路:社会是路,通向哲学大坑:哲学是坑,埋葬文科 ...

  8. KMP字符串匹配 洛古3375 kmp水题

    题目大意 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next 分析 好久没动到博客,因为中考. 但是中考结 ...

  9. 2017-2018年度刷题记录

    2018暑假刷题1: T1.CF6A Triangle (#模拟 -1.4) T2.CF59A Word(#模拟 -1.5) T3.[洛谷]P2772 寻找平面上的极大点(#贪心 -1.4) T4.[ ...

最新文章

  1. CF448C Painting Fence(分治递归/DFS)难度⭐⭐⭐
  2. python第一单元笔记_Python 初学笔记 - 第一章-列表
  3. try catch异常后会执行后面的代码吗_JVM异常处理最强讲解
  4. 快速安装Git客户端及TortoiseGit并使用
  5. python 全栈开发,Day116(可迭代对象,type创建动态类,偏函数,面向对象的封装,获取外键数据,组合搜索,领域驱动设计(DDD))...
  6. 详解Python的内置函数eval()
  7. 19-[模块]-xml
  8. ASP.Net Jquery 随机验证码 文本框判断
  9. java 人物头像识别
  10. 基于java在线影院订票系统论文
  11. 【环境配置】麦克风不够,手机来凑。---用手机当电脑麦克风解决方案
  12. 执行taosdemo发生错误Unable to establish connection
  13. 临床数据库挖掘系列2-使用SEER.stat软件提取数据
  14. android hook 第三方app_Android三大hook框架
  15. firefox新标签页背景_如何更改或自定义Firefox的“新标签页”
  16. flex 做的小相册+向上滚动字体
  17. 全面解读Java线程池的工作原理
  18. @EnableScheduling和@Scheduled的使用
  19. 基于机器学习的心脏病预测方法(1)——心脏病及Heart Disease UCI数据集介绍
  20. vue项目中使用代码编辑器,视频播放器插件

热门文章

  1. 在 Python 中的常见的几种字符串替换操作
  2. 英飞凌基础学习笔记(SMU)Safety Management Unit
  3. 常用的I/O流类库操纵符
  4. ajax的常用api测试
  5. 微信公众平台消息接口开发(11)地理位置查询 当地天气及附近商家
  6. 如何利用抖音精选联盟,实现月入10000+
  7. CSS3|大数据热点图案例(带图+代码)
  8. Service 定义(startService、bindService、IntentService)
  9. Linux-虚拟机ping不通主机
  10. 【论文阅读笔记】Noise2Noise: Learning Image Restoration without Clean Data