内存限制: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 nn≤500,1≤ti≤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 }