Larkin’s NOI
Larkin’s NOI
Problem Description
Input
下接N行,每行两个正整数,分别代表这道传统试题需要的时间和它的满分输入保证不会有题目的满分为0分,而且不会有题目需要的时间为0。
最后M行,每行两个正整数,分别代表这道提交答案型试题做1分钟可以获得的分数和它的满分。输入保证这M行中第二个数均为第一个数的倍数,而且不会有题目的满分为0分。
N
<= 500,M <= 100000, T <= 10000., (这里绝对不是 T <= 10000, 至少测试数据到了100000)
Output
Sample Input
3 0 100
1 100
100 200
101 10000
Sample Output
200
样例1解释
全部试题都是传统试题,最优策略为做完第二题,然后就没有时间了。获得的分数为200。(no full score?)
样例2输入
3 1 100
1 102
100 200
101 10000
1 99
样例2输出
201
样例2解释
有三道传统试题和一道提交答案型试题。如果仍然做第2道传统试题,那么得分为200。
而如果先做完第1道传统试题,再花费99分钟做提交答案型试题,获得99分,那么总得分为102+99=201分。(no full score again?)
样例3输入
3 1 100
1 102
100 200
101 10000
1 97
样例3输出
200
样例3解释
有三道传统试题和一道提交答案型试题。如果仍先做完第1道传统试题,
再花费97分钟做提交答案型试题(不能像第2个样例一样花费99分钟,因为那道题满分只有97分),获得97分,那么总得分为102+97=199分。
但如果做第二道传统试题,那么获得的分数为200分。(still no full score?)
样例4输入
3 1 10000
1 100
100 200
101 10000
1 100
样例4输出
10400
样例4解释
不解释……(full score… my favorite…)
解释:
这个题目的意思就是说呢,有两种拿分的题目,一种是分数可以一次拿完,但是要花费一定的时间,另一种是做多长时间,拿相应的分,直到这个题的满分,可以一分钟一分钟的拿分。最开始呢,我认为可能是一个贪心的题目,安装题目分数的权值来贪心,然后发现这个权值找不到。有两种题目,不能权值按照同一标准来。然后就越看越像 多重背包,如果不是题目测试数据中的 T 不是题目给定的 T <= 10000. 那么我多重背包还真的可以过,一次出 运行错误,我就很懵,然后在有除法的地方加了判断,还是 运行错误, 于是我又在 下标的地方做了判断,还是 运行错误, 这个时候我就很懵了。之后我们想到,可不可能是 T 的范围不对,毕竟看M的范围都那么大了,T应该要更大才合理。于是 按照 T >= 10000 的思路去写,一开始没想那么多,就直接又变成超时了,就很难受,就开始优化,各种小细节优化,然而并没有用,常数级的优化,终究还是抵不过数量级的优化。然后重新想。
因为第二种地题目是按照一分钟一分钟的来给分的。那么我先做分高的,再做分低的,那就可以了。并且前面 N 不是很大。所以,我就把第一种题目用01背包来做,多余的空间做第二种题,用贪心来填,再找最大的。
#include<bits/stdc++.h> using namespace std;
const int N = +; struct edge {
int v, w, s;
}edges[N]; int ans[N]; int Scan() { //输入外挂
int res = , ch, flag = ;
if ((ch = getchar()) == '-')
flag = ;
else if (ch >= '' && ch <= '')
res = ch - '';
while ((ch = getchar()) >= '' && ch <= '')
res = res * + ch - '';
return flag ? -res : res;
} struct edge temp[N]; bool cmp(edge a, edge b) {
return a.w > b.w;
} int res[N]; int main() {
int n, m, t; while (~scanf("%d %d %d", &n, &m, &t)) {
memset(ans, , sizeof(ans));
int tn = ;
for (int i = ; i <= n; i++) {
edges[tn].v = Scan(); edges[tn].w = Scan(); edges[tn].s = ;
if (edges[tn].v <= t) tn++;
}
ans[] = ;
for (int i = ; i < tn; i++) {
for (int j = t; j >= edges[i].v; j--) {
ans[j] = max (ans[j], ans[j - edges[i].v] + edges[i].w);
}
} for (int i = ; i < m; i++) {
temp[i].w = Scan(); temp[i].s = Scan();
}
sort(temp, temp + m, cmp);
res[] = ;
int tm = ;
for (int i = ; i < m && tm <= t; i++) {
int tx = temp[i].s / temp[i].w;
for (int j = ; j <= tx && tm <= t; j++) {
res[tm] = res[tm - ] + temp[i].w;
tm++;
}
} while(tm <= t) res[tm] = res[tm-], tm++; int max_res = ;
for (int i = ; i <= t; i++) {
int tr = ans[i] + res[t - i];
max_res = max(max_res, tr);
} printf("%d\n", max_res);
}
return ;
}
Larkin’s NOI的更多相关文章
- 从一道NOI练习题说递推和递归
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...
- NOI 动态规划题集
noi 1996 登山 noi 8780 拦截导弹 noi 4977 怪盗基德的滑翔翼 noi 6045 开餐馆 noi 2718 移动路线 noi 2728 摘花生 noi 2985 数字组合 no ...
- noi 6047 分蛋糕
题目链接:http://noi.openjudge.cn/ch0405/6047/ 和Uva1629很类似,不过,可能用记忆化难写一点,状态初始化懒得搞了.就用循环好了. 状态描叙也可以修改,那个题目 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- NOI 2015 荷马史诗【BZOJ 4198】k叉Huffman树
抱歉因为NOIP集训,好长时间没再写题解了. NOI 2015也就只有这道题一看就能懂了-- 4198: [Noi2015]荷马史诗 Time Limit: 10 Sec Memory Limit: ...
- noi题库(noi.openjudge.cn) 1.7编程基础之字符串T31——T35
T31 字符串P型编码 描述 给定一个完全由数字字符('0','1','2',-,'9')构成的字符串str,请写出str的p型编码串.例如:字符串122344111可被描述为"1个1.2个 ...
- NOI WC2016滚粗记
Day-4 报到日,今年居然没有发包QAQ,中午到的,志愿者很热情,食堂吃不了(也有可能是吃不惯),空调打不热,有拖线板(好评),有wifi覆盖(虽然听说连上要看脸)(反正我是没连过,用的自己的流量) ...
- NOI题库刷题日志 (贪心篇题解)
这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个平面上,如果有两个点( ...
- NOI题库 1768最大子矩阵 题解
NOI题库 1768最大子矩阵 题解 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...
随机推荐
- springboot扫描自定义的servlet和filter代码详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 这几天使用spring boot编写公司一个应用,在编写了一个filter,用于指定编码的filter,如下: /** ...
- raster导入postgres Windows命令
cmd命令行 raster2pgsql -s 4326 -I -C -M C:\Users\tt\Downloads\tmean_19_tif\*.tif -F -t 256x256 tmean_19 ...
- linux下部署nginx服务
1.安装依赖包 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 2.下载并解压安装包 cd /usr/loc ...
- 020:reverse函数补充
补充reverse两点: 1.如若在反转url时,需要添加参数,那么可以传递 kwargs 参数到 reverse 函数中,实例代码如下: '}) ) 2.如若想添加查询字符串参数,则必须手动进行ur ...
- SpringBoot搭建基于Apache Shiro的权限管理功能
Shiro 是什么 Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户“登录”: 授权 - 访问控制: 密码加密 ...
- (50)LINUX应用编程和网络编程之五 Linux信号(进程间通信)
信号实现进程间的通信 3.5.1.什么是信号 ...
- 【Spark机器学习速成宝典】基础篇02RDD常见的操作(Python版)
目录 引例入门:textFile.collect.filter.first.persist.count 创建RDD的方式:parallelize.textFile 转化操作:map.filter.fl ...
- sed将一个文件插入到另一个文件(合并两个文件)
将before.sh的内容插入到catalina.sh的第一行之后 sed -i '1r /srv/tomcat8/bin/before.sh' /srv/tomcat8/bin/catalina.s ...
- SpringMvc配置自定义视图
1.在dispatcherServlet-servlet.xml配置自定义视图 <!-- 配置视图 BeanNameViewResolver 解析器: 使用视图的名字来解析视图 --> & ...
- 2018 icpc 沈阳
https://codeforces.com/gym/101955 J 签到 #include<iostream> #include<cstring> #include< ...