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. 获取树莓派ip地址的方法

    1.有显示器​ (1)鼠标停留在屏幕右上角网络图标上,2-3秒会显示网络连接信息​(2) 图形界面下打开终端运行ifconfig命令 2.登录路由器​查看名叫raspberry的设备 3.电脑上运行命 ...

  2. c# 操作mysql数据库的时候会出现 插入中文汉字变成问号?

    场景: 在mysql ce里面执行时没有问题的. c#操作会出现问号. 原因是:  链接字符串的时候 要设置Charset=utf8; 不然就会按默认的服务器设置编码,通常会出问题. 检查: 1.创建 ...

  3. 【canvas学习笔记三】样式和颜色

    上一节我们学习了如何用路径绘制各种形状,但我们只能用默认的颜色和线条.这节就来学习设置不同的颜色和线条样式. 颜色 设置颜色主要有两个属性: fillStyle = color 设置填充颜色 stro ...

  4. Luogu P5469 [NOI2019]机器人 (DP、多项式)

    不用FFT的多项式(大雾) 题目链接: https://www.luogu.org/problemnew/show/P5469 (这题在洛谷都成绿题了海星) 题解: 首先我们考虑,一个序列位置最右边的 ...

  5. Vue v-if以及 v-else 的使用

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. javadoc生成文档

    标签(空格分隔): javadoc java生成html的文档: 要生成注释文档html格式,java里面提供一个工具:javadoc 例如: javadoc -d myhelp -author -v ...

  7. 三、Appium-python-UI自动化之元素定位uiautomatorviewer

    uiautomatorviewer是android-sdk自带的一个元素定位工具,非常简单好用,使用uiautomatorviewer,可以检查一个应用的UI来查看应用的布局和组件以及相关的属性. 一 ...

  8. mount -o是什么意思

    mount -o是用loop设备, 在 linux挂载本地的(可能是硬盘上的) iso文件时, 使用的. -o 就是loop回环设备的意思. loop回路文件系统: 是: 用来在一个文件系统上实现另一 ...

  9. 构造Map并对其排序

    #构造Map并对其排序 attr_tul = ['a','b','c','d','e','f'] one_tul = [,,,,,] one_dic = {} for i in range(len(a ...

  10. vivo 部分链表反转

    方法一:使用栈交换需要反转的数字 #include <iostream> #include <stack> #include "list.h" using ...