LOJ#10004. 「一本通 1.1 例 5」智力大冲浪

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: 1bentong

题目描述

小伟报名参加中央电视台的智力大冲浪节目。本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者 mmm 元。先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则:

首先,比赛时间分为 nnn 个时段,它又给出了很多小游戏,每个小游戏都必须在规定期限 tit_iti​​ 前完成。如果一个游戏没能在规定期限前完成,则要从奖励费 mmm 元中扣去一部分钱 wiw_iwi​​,wiw_iwi​​ 为自然数,不同的游戏扣去的钱是不一样的。当然,每个游戏本身都很简单,保证每个参赛者都能在一个时段内完成,而且都必须从整时段开始。主持人只是想考考每个参赛者如何安排组织自己做游戏的顺序。作为参赛者,小伟很想赢得冠军,当然更想赢取最多的钱!注意:比赛绝对不会让参赛者赔钱!

输入格式

输入共四行。

第一行为 mmm,表示一开始奖励给每位参赛者的钱;

第二行为 nnn,表示有 nnn 个小游戏;

第三行有 nnn 个数,分别表示游戏 111 到 nnn 的规定完成期限;

第四行有 nnn 个数,分别表示游戏 111 到 nnn 不能在规定期限前完成的扣款数。

输出格式

输出仅一行,表示小伟能赢取最多的钱。

样例

样例输入

10000
7
4 2 4 3 1 4 6
70 60 50 40 30 20 10

样例输出

9950

数据范围与提示

对于 100%100\%100% 的数据,有 n≤500,1≤ti≤nn\le 500,1\le t_i\le nn500,1ti​​n。

 1 //2018-08-09 17:43:28
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <algorithm>
 5 #include <cstring>
 6 using namespace std;
 7 
 8 const int N = 1000001;
 9 int m, n;
10 struct node{
11     int tim;
12     int money; 
13 }a[N];
14 
15 bool cmp(node a, node b){
16     return a.money > b.money;
17 }
18 bool vis[100001];
19 int main(){
20     cin >> m >> n;
21     for(int i=1; i<=n; i++)    cin >> a[i].tim;
22     for(int i=1; i<=n; i++) cin >> a[i].money;
23     sort(a+1, a+n+1, cmp);
24     for(int i=1; i<=n; i++){
25         int flag = 1;
26         for(int j=a[i].tim; j>0; j--){
27             if(!vis[j]){ vis[j] = 1; flag = 0; break;}
28         }
29         if(flag) m -= a[i].money;
30     }
31     printf("%d\n", m);
32 
33     return 0;
34 }

猜你喜欢

转载自www.cnblogs.com/sineagle/p/9450585.html
今日推荐