内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者:
题目描述
小伟报名参加中央电视台的智力大冲浪节目。本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者 mmm 元。先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则:
首先,比赛时间分为 nnn 个时段,它又给出了很多小游戏,每个小游戏都必须在规定期限 tit_iti 前完成。如果一个游戏没能在规定期限前完成,则要从奖励费 mmm 元中扣去一部分钱 wiw_iwi,wiw_iwi 为自然数,不同的游戏扣去的钱是不一样的。当然,每个游戏本身都很简单,保证每个参赛者都能在一个时段内完成,而且都必须从整时段开始。主持人只是想考考每个参赛者如何安排组织自己做游戏的顺序。作为参赛者,小伟很想赢得冠军,当然更想赢取最多的钱!注意:比赛绝对不会让参赛者赔钱!
输入格式
输入共四行。
第一行为 mmm,表示一开始奖励给每位参赛者的钱;
第二行为 nnn,表示有 nnn 个小游戏;
第三行有 nnn 个数,分别表示游戏 111 到 nnn 的规定完成期限;
第四行有 nnn 个数,分别表示游戏 111 到 nnn 不能在规定期限前完成的扣款数。
输出格式
输出仅一行,表示小伟能赢取最多的钱。
样例
样例输入
1000074 2 4 3 1 4 670 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 #include3 #include 4 #include 5 #include 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 }