题目链接:https://www.luogu.org/problemnew/show/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≤150

解题思路:

其实题目的意思就是,从这一批作业中挑选一些作业,使得这些作业的总分数大于或等于k,并且完成这些作业的总时间尽可能的短(从而留下更多的时间刷题)。本题的难点就在于,如何如何实现上述问题。

其实这题是01背包的变种问题,对每一项作业都有两种选择,选或者不选。不难发现,我们可以将问题看成一个倒过来的01背包问题,即将题目要求转变为,从这一批作业中挑选一些作业,使得这些作业的总

分数小于或等于sumscore-k,并且使这些作业的总时间尽可能的长(即写作业的时间尽可能的短),使题目转换为一个简单的01背包问题。

#include <bits/stdc++.h>
using namespace std; int main()
{
int n, m, k, r;
while (cin >> n >> m >> k >> r)
{
int i, j;
int que[],time[],score[];
int sumscore = ; int sumtime = ;
for (i = ; i < n; i++)cin >> que[i];
for (i = ; i < m; i++){
cin >> time[i]; sumtime += time[i];
}
for (i = ; i < m; i++){
cin >> score[i]; sumscore += score[i];
}
int res = sumscore - k;
int dp[]; memset(dp, , sizeof(dp)); //一定记得要将dp数组初始化,否则输出的是0
for (i = ; i < m; i++)
{
for (j = res; j >= score[i]; j--)
{
dp[j] = max(dp[j], dp[j - score[i]] + time[i]);
}
}
int lefttime = r - (sumtime - dp[res]); //剩余用来刷题的时间。(可能会有人以为剩余刷题时间就是dp[res])
sort(que, que + n);
int ans = ; i = ;
while (lefttime>=que[i])
{
ans++;
i++;
lefttime -= que[i];
}
cout << ans << endl;
}
return ;
}

2018-05-15

洛谷P1926 小书童—刷题大军【01背包】的更多相关文章

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

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

  2. 洛谷—— P1926 小书童——刷题大军

    https://www.luogu.org/problem/show?pid=1926#sub 题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人 ...

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

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

  4. 洛谷P1446/BZOJ1004 Cards Burnside引理+01背包

    题意:有n张牌,有R+G+B=n的3种颜色及其数量,要求用这三种颜色去染n张牌.n张牌有m中洗牌方式,问在不同洗牌方式下本质相同的染色方案数. 解法:这道题非常有意思,题解参考Hzwer学长的.我这里 ...

  5. 洛谷P1164小A点菜(01背包)

    题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过uim由于买了一些辅(e ...

  6. 洛谷P1441 砝码称重 枚举 + 01背包

    显然,n<=20, m<=4 的数据范围一眼爆搜. 直接搜索一下不用哪4个砝码,再做一遍01背包即可. 可能是本人太菜鸡,01背包部分调了半天QAQ-- #include<cstdi ...

  7. 洛谷 P2871 [USACO07DEC]手链Charm Bracelet && 01背包模板

    题目传送门 解题思路: 一维解01背包,突然发现博客里没有01背包的板子,补上 AC代码: #include<cstdio> #include<iostream> using ...

  8. 【洛谷 P1707】 刷题比赛 (矩阵加速)

    题目连接 很久没写矩阵加速了,复习一下,没想到是一道小毒瘤题. 状态矩阵\(a[k],b[k],c[k],a[k+1],b[k+1],c[k+1],k,k^2,w^k,z^k,1\) 转移矩阵 0, ...

  9. 洛谷 P1282 多米诺骨牌("01"背包)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 参考资料: [1]:https://blog.csdn.net/Darost/artic ...

随机推荐

  1. MyBatis学习-入门

    eclipse + jdk 1.8 + mybatis 1.数据库准备 安装mysql数据库,建立数据库test,在test库下建立测试的表 CREATE TABLE `t_user` ( `id` ...

  2. HDU 2191 - 单调队列优化多重背包

    题目: 传送门呀传送门~ Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种 ...

  3. Android开发技巧——ViewPager加View情况封装PagerAdapter的实现类

    ViewPager是Android的support库中的一个控件. ViewPager + Fragment的使用,已经有FragmentAdapter的实现可以帮助我们快速进行开发了: ViewPa ...

  4. Hadoop的RPC机制及简单实现

    1.RPC简介 Remote Procedure Call 远程过程调用协议 RPC——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些 ...

  5. Flex布局和Bootstrap布局两者的比较

    在Bootstrap中采用12栅格的布局,12份随意分配,但是不能解决5等分,7等分的问题.所以flex布局来协助. bootstrap的布局方式 <div class="row&qu ...

  6. 【API】恶意样本分析手册——API函数篇

    学编程又有材料了 http://blog.nsfocus.net/malware-sample-analysis-api/

  7. kafka系列八、kafka消息重复和丢失的场景及解决方案分析

    消息重复和丢失是kafka中很常见的问题,主要发生在以下三个阶段: 生产者阶段 broke阶段 消费者阶段 一.生产者阶段重复场景 1.根本原因 生产发送的消息没有收到正确的broke响应,导致pro ...

  8. linux添加定时任务crond

    1.crontab –e:编辑当前定时任务 保存完重新crond : service crond restart 2. crontab用法 crontab –e : 修改 crontab 文件,如果文 ...

  9. 006_ssl监测及评分

    https://testssl.sh/ 一. https://www.ssllabs.com/ssltest/analyze.html?d=jyall.com 监测下jyll.com,不忍直视啊! 二 ...

  10. CentOS 6.5环境下使用HAProxy+apache实现web服务的动静分离

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...