C++ 洛谷P1230 智力大冲浪_weixin_30539625的博客-程序员秘密

技术标签: 游戏  数据结构与算法  c/c++  

题目描述

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

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

输入输出格式

输入格式:

 

输入文件riddle.in,共4行。

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

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

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

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

 

输出格式:

 

输出文件riddle.out,仅1行。表示小伟能赢取最多的钱。

 

输入输出样例

输入样例#1:
10000
7
4 2 4 3 1 4 6
70 60 50 40 30 20 10
输出样例#1:
9950

此题是贪心算法

把此题当成允许座位(空间)问题

首先分析样例——

10000

7

4 2 4 3 1 4 6

70 60 50 40 30 20 10

原先有10000(m)元,有7(n)项活动。

可以在1-4内完成zl[1].t,否则扣钱70元zl[1].v;有4个座位

可以在1-2内完成zl[2].t,否则扣钱60元zl[2].v;有2个座位

可以在1-4内完成zl[3].t,否则扣钱50元zl[3].v;有4个座位

可以在1-3内完成zl[1].t,否则扣钱70元zl[1].v;有3个座位

可以在1-1内完成zl[2].t,否则扣钱60元zl[2].v;有1个座位

可以在1-4内完成zl[3].t,否则扣钱50元zl[3].v;有4个座位

可以在1-6内完成zl[3].t,否则扣钱50元zl[3].v;有6个座位

要想得到更多钱,就要少扣钱,等于把扣钱多的游戏玩了在玩扣钱少的。

所以贪心策略如下:

从多到少——————

如果规定时间允许就贪。

先把第1个最贵的做了,把第四个座位占了。(肯定越后面的越好啊,就不会影响前面的座位,只影响后面的座位。)所以凡是能占第四个座位的,都会少一个的座位。座位数就变成了(2,4-1,3,1,4-1,6-1——2,3,3,1,3,5);

 for(int j=i+1;j<=n;j++)  //完成后,所有能站此座位的的,都少了一座位,就-1。(多理解一下)。
 if(zl[i].t<=zl[j].t) 
 zl[j].t--;

 

以此类推……(如果时间<0,就在扣钱总数中加上相应扣钱数)

he+=zl[i].v;

本人为了学习信息学奥赛,因为时间关系就不陈述了。

说不清了,粘代码(大佬可以用并查集优化)

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,he,we;
struct c{      //结构体
    int t,v;   //t是时间(也就我所说的座位) v是扣钱量(代价) 
}zl[501];//每个项目 
bool cmp(c a,c b)  //sort函数按金钱大小来排(money!!!)
{
    return a.v>b.v;
} 
int main()
{
    scanf("%d%d",&m,&n);
    for (int i=1;i<=n;i++)
    scanf("%d",&zl[i].t);  //规定时间
    for (int i=1;i<=n;i++)
    {
            scanf("%d",&zl[i].v); //扣钱!!
    }
    sort(zl+1,zl+n+1,cmp);
    for (int i=1;i<=n;i++)
    {
        if(zl[i].t>0)    //如果有时间完成,就完成。
        {
            for(int j=i+1;j<=n;j++)  //完成后,所有能站此座位的的,都少了一座位,就-1。(多理解一下)。
            if(zl[i].t<=zl[j].t) 
            zl[j].t--;
        }
        else     //没时间,就代表必须扣相应的钱了。
        he+=zl[i].v;
    }
    printf("%d",m-he);
    return 0;
 }

勿喷…………qaq,


转载于:https://www.cnblogs.com/mzyczly/p/10702418.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30539625/article/details/99229193

智能推荐

全表扫描定时任务设计_定时任务扫描表_ssseeelll的博客-程序员秘密

可以在表中加一个check_time字段表示任务扫描(执行)的时间,按check_time升序, 分批次执行

NYOJ 2 括号配对问题(数据结构)_阿金在森林的博客-程序员秘密

括号配对问题时间限制:3000 ms  |  内存限制:65535 KB难度:3描述 现在,有一行括号序列,请你检查这行括号是否配对。输入第一行输入一个数N(0输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入3[(])(])([[]()])样例输出NoNoYes来源网络上传者naonao

Python绘图总结(Matplotlib篇)之坐标轴及刻度_matplotlib怎么显示刻度线_wuzlun的博客-程序员秘密

学习https://matplotlib.org/gallery/index.html 记录,描述不一定准确,具体请参考官网import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签plt.rcParams['axes.unicode_minus']=False # 用来正常显...

GDB调试各功能总结_dl-fini_shaderdx的博客-程序员秘密

初识GDB GDB的出现减轻了开 发人员的负担,他们可以在程序运行的时候单步跟踪自己的代码,或者通过断点暂时中止程序的执行。此外,他们还能够随时察看变量和内存的当前状态,并监视关 键的数据结构是如何影响代码运行的。     调试方法     如果想对程序进行调试,必须先在用GCC编译源代码时加上-g选项,以便产生GDB所需要的调试符号信息。例如,debugme.c是一个存在错误

无限地等待_aime99的博客-程序员秘密

    很庆幸,久违之后,当思想被纷乱的思绪烦扰时,还能想起这里——自我心灵的桃源。    从四月的北京走到五月的沈阳,再到七月的广州南宁,以及现在的蓉城,路走的远,心走得更远,甚至常常忘记自己身处何地,自己究竟是谁?        很多时候都在等待,在等待中逐渐变得焦躁,再转化成无奈。在这漫长的等待中,很难让自己冷静下来,去主动地寻找机会,去争取机会,而是在反复说服自己应该如何学

使用matlab制作音乐_故意装菜的博客-程序员秘密

使用matlab生成声音,其中对包络函数进行了修改和创新

随便推点

No bundle URL present.Make sure you're running a packager server or have included a .jsbundle - RN_rn 模拟器 no bundle url present. make sure you're run_survivorsfyh的博客-程序员秘密

搭建 ReactNative 项目简直是一波多折,期间遇到了很多的状况具体详见其它文章内容分享吧,回归正题!排除种种问题过后执行 react-native run-ios 命令可算是可以成功的把项目(全新创建 init 的空工程!)启动了,OMG!但好景不长,唤起模拟器开始渲染界面,随后当屏一棒,干得漂亮新的异常诞生了!No bundle URL present.Make sure y...

shell如何在指定文件的指定位置后面添加内容_lwj103862095的博客-程序员秘密

最近工作中遇到一个问题,想在某个文件的指定位置后面添加一个标志位,要求在shell脚本里实现。问题说明:想在sys_config.fex文本的某个字符串后面添加一个flag例如:sys_config.fex里有这么一段[nand_para]nand_use = 1要求在[nand_para]后面添加一个flag = 1,最后变成(不影响其他内容):[nand_para]flag = 1nand_u

https 出现host name not match 问题_does not match the certificate subject provided by_aicong的博客-程序员秘密

'www.xxx.com' does not match the certificate subject provided by the peer出现这个问题的原因是你访问的域名和你访问服务器的证书的机构(域名)不一致导致的,比如,你的证书是为域名 sss.com注册的,而你访问的时候的域名是xxx.com,这个时候就会报这种错误,解决办法是重写httpclient的HostnameVerif

王者荣耀s15服务器维护,王者荣耀s15赛季更新内容_体验服s15赛季新模式英雄调整汇总..._吴传铭的博客-程序员秘密

下面给大家带来王者荣耀s15赛季更新前瞻,目前在体验服内,已经更新了很多S15赛季的相关内容,其中包括:新模式王者快跑、11位英雄调整、两套装备调整、新英雄测试、实战模拟测试、信誉积分优化、皮肤品质升级等,感兴趣的一起来了解一下吧。新模式王者快跑新模式采取2V2的形式,围绕着王者峡谷跑圈,以两人的名次决胜负。在赛跑途中会遇到许多新颖的道具,比如:加速buff、眩晕道具、NPC吕布跳大,等等,而王者...

HDOJ2191:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活_.偽艺术家的博客-程序员秘密

题目大意:解题思路:把它改成01背包去做;代码:#include&lt;bits/stdc++.h&gt;using namespace std;int dp[2001][2001];int v[2001],w[2001];int main(){ int t; cin&gt;&gt;t; while(t--) { memset(dp,0,sizeof(dp)); int n,m; int p,h,c; int cnt=1; cin&gt;&gt;n&gt.

为什么阿里巴巴禁止使用Apache Beanutils进行属性的copy?_程序员小灰的博客-程序员秘密

作者 l Hollis来源 l Hollis(ID:hollischuang)在日常开发中,我们经常需要给对象进行赋值,通常会调用其set/get方法,有些时候,如果我们要转换的两个对象...

推荐文章

热门文章

相关标签