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. CSP-S2019游记&拆塔记

    不是拆广州塔 Day -inf 四套NOI模拟降智 Day0 拆了一发新新 本来想复习小圆脸结果拆了3h最后还没带任意门 没有帘子可还行 第一天由于没发现被子可以抽出来就没睡好 Day1 8:30开考 ...

  2. 14. ClustrixDB 高可用性的最佳实践

    本文档详细介绍了最大化ClustrixDB上运行的应用程序正常运行时间的最佳实践.这涵盖了广泛的主题,从环境需求到变更管理程序,所有这些最终都会影响应用程序的可用性.其中许多是您可能已经熟悉的标准最佳 ...

  3. Linux 环境下 gzip 的加解密命令

    1.加密 [root@127-0-0-1 nginx]# gzip -v access.log-20190328 access.log-20190328: 95.8% -- replaced with ...

  4. tf.random_uniform出错tensorflow2.0出错

    https://blog.csdn.net/hhy_csdn/article/details/82263007 https://blog.csdn.net/weixin_44038165/articl ...

  5. scrapy项目1:爬取某培训机构老师信息(spider类)

    1.scrapy爬虫的流程,可简单该括为以下4步: 1).新建项目---->scrapy startproject 项目名称(例如:myspider) >>scrapy.cfg为项目 ...

  6. [LeetCode]-DataBase-Nth Highest Salary

    Write a SQL query to get the nth highest salary from the Employee table. +----+--------+ | Id | Sala ...

  7. ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)A ASCII Area

    A: 给你一个矩阵求'/' 和 '\' 围成的图形,简单签到题,有一些细节要考虑. 题解:一行一行的跑,遇到'/'和'\' 就加0.5, 在面积里面的'.' 就加1.用一个flag来判断是否在围住的图 ...

  8. 条形码(barcode)code128生成代码

    条形码(barcode)code128生成代码 很简单 多些这位兄弟https://bbs.csdn.net/topics/350125614 下面是我的DEMO 直接放到VS2005下面编译即可 # ...

  9. leetcode-mid-math-202. Happy Number-NO

    mycode 关键不知道怎么退出循环.............其实只要有一个平方和以前出现过,那么整个计算过程就会重复 参考: class Solution(object): def isHappy( ...

  10. Java8 新特性之集合操作Stream

    Java8 新特性之集合操作Stream Stream简介 Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同 ...