Larkin’s NOI

Problem Description

Larkin has been to Yantai to take part in NOI 2010!众所周知(do you know?),NOI比赛中有两类题目:传统试题(就是你们现在正在做的这类)和提交答案型试题(就是给你输入文件,要你给出输出文件的题目)。不妨假设NOI的传统试题都没有部分分,也就是说,必须花费一定的时间才能获得那道题目的满分,否则就1分也拿不到。而对于提交答案型试题,由于测试点很多而且有部分分,所以每做一分钟就可以得到一些分数(当然提交答案型试题也有满分,你是不可能获得比满分更多的分数的)。Unfortunately,NOI比赛时间有限,而Larkin没有足够能力拿到NOI所有题的满分(really?),因此他想请你帮他计算一下,他最多能得到多少分数。

Input

第一行三个整数N,M,T,分别为传统试题的个数、提交答案型试题的个数和NOI考试的时间。
下接N行,每行两个正整数,分别代表这道传统试题需要的时间和它的满分输入保证不会有题目的满分为0分,而且不会有题目需要的时间为0。
最后M行,每行两个正整数,分别代表这道提交答案型试题做1分钟可以获得的分数和它的满分。输入保证这M行中第二个数均为第一个数的倍数,而且不会有题目的满分为0分。
N
<= 500,M <= 100000, T <= 10000., (这里绝对不是 T <= 10000, 至少测试数据到了100000)

Output

一个正整数,为Larkin最多能获得的分数(obviously full score!)。

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的更多相关文章

  1. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

  2. NOI 动态规划题集

    noi 1996 登山 noi 8780 拦截导弹 noi 4977 怪盗基德的滑翔翼 noi 6045 开餐馆 noi 2718 移动路线 noi 2728 摘花生 noi 2985 数字组合 no ...

  3. noi 6047 分蛋糕

    题目链接:http://noi.openjudge.cn/ch0405/6047/ 和Uva1629很类似,不过,可能用记忆化难写一点,状态初始化懒得搞了.就用循环好了. 状态描叙也可以修改,那个题目 ...

  4. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  5. NOI 2015 荷马史诗【BZOJ 4198】k叉Huffman树

    抱歉因为NOIP集训,好长时间没再写题解了. NOI 2015也就只有这道题一看就能懂了-- 4198: [Noi2015]荷马史诗 Time Limit: 10 Sec  Memory Limit: ...

  6. noi题库(noi.openjudge.cn) 1.7编程基础之字符串T31——T35

    T31 字符串P型编码 描述 给定一个完全由数字字符('0','1','2',-,'9')构成的字符串str,请写出str的p型编码串.例如:字符串122344111可被描述为"1个1.2个 ...

  7. NOI WC2016滚粗记

    Day-4 报到日,今年居然没有发包QAQ,中午到的,志愿者很热情,食堂吃不了(也有可能是吃不惯),空调打不热,有拖线板(好评),有wifi覆盖(虽然听说连上要看脸)(反正我是没连过,用的自己的流量) ...

  8. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  9. NOI题库 1768最大子矩阵 题解

    NOI题库 1768最大子矩阵  题解     总时间限制: 1000ms 内存限制: 65536kB   描述   已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...

随机推荐

  1. Redis如何实现高可用【主从复制+哨兵机制+keepalived】

    实现redis高可用机制的一些方法: 保证redis高可用机制需要redis主从复制.redis持久化机制.哨兵机制.keepalived等的支持. 主从复制的作用:数据备份.读写分离.分布式集群.实 ...

  2. 在Tomcat中部署Java Web应用程序几种方式

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署      静态部署指的是我们在服务器启动之前部 ...

  3. Vue.js 动态为img的src赋值

    在vue中动态给src赋值绑定图片会显示不出来 动态添加src被当做静态资源处理了,没有进行编译 解决方法: 1.用网络地址 把图片放在cdn或自己的服务器上,把网络地址存在imgUrl里,然后直接& ...

  4. codevs 5971 打击犯罪 x

                         题目描述 Description 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接 ...

  5. RPN

    训练: 特征图是51x39x256,对该图像的每点考虑9个窗口:三种候选面积(128,256,512) x 三种尺度(1:1,1:2,2:1).这些候选窗口称为anchors.如下图: 如果图片尺寸w ...

  6. (45)FreeRTOS学习之二

    一:架构概述 FreeRTOS是一个相对较小的应用程序.最小化的FreeRTOS内核仅包括3个(.c)文件和少数头文件,总共不到9000行代码,还包括了注释和空行.一个典型的编译后(二进制)代码映像小 ...

  7. Spring Data JPA(一)简介

    Spring Data JPA介绍 可以理解为JPA规范的再次封装抽象,底层还是使用了Hibernate的JPA技术实现,引用JPQL(Java Persistence Query Language) ...

  8. 几种常见的CSS布局

    本文概要 本文将介绍如下几种常见的布局: 其中实现三栏布局有多种方式,本文着重介绍圣杯布局和双飞翼布局.另外几种可以猛戳实现三栏布局的几种方法 一.单列布局 常见的单列布局有两种: header,co ...

  9. iOS 自定义一对UI表现相反的按钮

    假如有一对按钮[重置][提交],要让他们的默认UI和点击的UI表现刚好相反 [提交]按钮,默认橙色,点击边框是橙色,字体是橙色,背景变白色 [重置]按钮,默认白色橙色,边框是橙色,点击字体是白色,背景 ...

  10. PTA编程总结三

    7-1 抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块 ...