题目链接:https://loj.ac/problem/10004

题目描述

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

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

输入格式

输入共四行。

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

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

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

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

输出格式

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

样例

样例输入

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

样例输出

9950

数据范围与提示

对于 100%所有数据,有 n ≤ 500,1 ≤ t ≤ n

分析

扣款数多的肯定要先完成,但如何避免把扣款数高的题目过早完成而导致本来能完成的题目完不成了呢?

因为扣款数多的要优先完成,所以我们根据扣款数对任务从大到小进行排序,然后从第一个(扣款数最多的)任务开始,将他放到他能放到的最后期限去做,(目的是保证不出现前面所说的问题),排在后面可以为时间要求更高的任务留出时间。

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
typedef struct
{   int num;        // num 表示完成期限 int count;    // count 表示扣款数
}goods;
int cmp(goods x,goods y)
{return x.count > y.count;
}
int main()
{int all,n,i,book[501]={0},t;goods a[501];cin >> all;cin >> n;for(i=1;i<=n;i++)cin >> a[i].num;for(i=1;i<=n;i++)cin >> a[i].count;sort(a+1,a+n+1,cmp);
// 核心代码段
// **********for(i=1;i<=n;i++){for(t=a[i].num;t>0;t--){if(book[t] == 0){book[t] = 1;break;}}if(t == 0)all -= a[i].count;}
// ************cout << all << endl;
}

并查集算法:时间上更优

#include <iostream>
#include <algorithm>
#include <bits\stdc++.h>
const int maxn = 501;
using namespace std;
typedef struct
{int d;int c;
}goods;
bool cmp(goods x,goods y)
{return x.c > y.c;
}
int fa[maxn];
int getfa(int x)
{if(fa[x] == x)return x;elsereturn fa[x] = getfa(fa[x]);
}
int main()
{int all,i,n,maxx=0;goods a[maxn];cin >> all;cin >> n;for(i=1;i<=n;i++)cin >> a[i].d;for(i=1;i<=n;i++){cin >> a[i].c;maxx = max(a[i].c,maxx); }sort(a+1,a+1+n,cmp);for(i=1;i<=maxx;i++)fa[i]=i;for(i=1;i<=n;i++){int j = getfa(a[i].d);if(j){fa[j] = j-1;}if(!j)all -= a[i].c;}cout << all;
}

智力大冲浪 【贪心】相关推荐

  1. 洛谷P1230 智力大冲浪(贪心)

    P1230 智力大冲浪 题解:准着一个贪心思想,在尽可能短的时间内,做价值尽可能多的题. 因此,我们可以按照价值从大到小排个序,然后对于每一道题看在时间限制内可以做哪几道题.时间复杂度Θ(N2)\Th ...

  2. C语言(CED)智力大冲浪——贪心算法第一题

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

  3. P1230 智力大冲浪 贪心

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

  4. CQNKOJ P5215 智力大冲浪(贪心算法)题解

    前言 这题 不 有点麻烦,可能有更好的解法,笔者的方法通俗易懂,希望大家都能A掉这道题 先看题目 时间限制 : 10000 MS 空间限制 : 65536 KB 问题描述 小伟报名参加中央电视台的智力 ...

  5. 贪心算法(5.智力大冲浪+解题思路)

    1.带期限和罚款的单位时间任务调度                                                         智力大冲浪 题目描述 小伟报名参加中央电视台的智力大 ...

  6. 贪心算法之智力大冲浪

    #!/usr/bin/python3 # 文件名: 贪心算法之智力大冲浪 # 作者:巧若拙 # 时间:2018-12-29 ''' 智力大冲浪(riddle.pas). [题目描述] 小伟报名参加中央 ...

  7. 洛谷p1230 智力大冲浪 (贪心问题)

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

  8. 贪心算法——智力大冲浪

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

  9. 智力大冲浪 (牛客贪心)

    https://ac.nowcoder.com/acm/contest/950/E 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参 ...

最新文章

  1. linux 在某个core上的中断 affinity c语言函数,Linux中断处理体系结构
  2. linux 压缩及解压缩 命令
  3. C语言九十六之实现经典的字符串反转(通过指针或下标操作)
  4. 弥补Web开发缺陷 实战HTML 5中存储API
  5. 清远高考成绩查询2021年,2021年清远高考最高分多少分,历年清远高考状元
  6. DCMTK:Receiving Images from PACS using DCMSCU
  7. log4j的日志级别
  8. Sonar插件的安装与使用详解
  9. AutoCAD2014 无法通过快捷方式启动
  10. CSS颜色渐变的按钮样式
  11. Google搜索网址
  12. 什么是CDN及CDN加速原理
  13. Scala隐式转换的问题分析--String隐式转换为Int
  14. 机器学习之回归与分类
  15. 9. 成功解决:Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found
  16. 小技巧:不显示打印对话框直接打印网页到打印机
  17. matlab教程 for循环,Matlab for循环使用操作教程分享
  18. Espressif 玩转 PWM
  19. Linux网络编程——网络协议入门
  20. 【阿里云流计算】- 电商订单和销量统计案例

热门文章

  1. “让专业的人做专业的事”,畅捷通与阿里云的云原生故事
  2. 欢乐家上市后连跌两日:规模增速有所放缓,产能利用率较低
  3. ACM模式各种输入整理(C++)
  4. 入局先进空中交通,Overair推出全电动垂直起降飞机
  5. Ceph分布式存储系统架构研究综述
  6. JLINK转接板便携精简版
  7. 考研复试C语言微机原理,放福利,初试数模电,复试微机原理和C的进来看看
  8. IK分词器扩展词典、停用词典、同义词典
  9. 景德镇特色的部门级别与权限
  10. 以萨技术在科创板IPO终止:计划募资15亿元,实控人为李凡平