当前位置: 首页 > news >正文

浅谈贪心算法2

这是我写的贪心5章中的第2章,这一章,我想讲一讲在OI竞赛中,贪心直觉的重要性

在考场上,因为考前作息,心理状态甚至生理状态,都会影响我们的成绩,所以考场上分析问题的能力可能会大有缩水,所以我认为,普及组想拿一等奖,平时至少要有提高组一等奖或二等奖的水准

不过讲这些好像跑题了,想在考场上写对贪心算法,对一个选手的要求是很高的,那么,除了可怕的数学建模能力,就真的没有解决贪心的方法了?

答案是:直觉

https://www.luogu.org/problemnew/show/P4447

也许正如那些大神所说的,在2018的安徽省选中,我只在现场AC了两题,一道红题,一道绿题(也就是上面这题),平时都能切切蓝题的,但是在考场上,T2(一道蓝题)只拿到了40分的暴力,主要就是靠这题来扳回分数

大概一个小时,拿下了T1和T2(T2写的暴力),看了一下题面,感觉这题还是可做的,于是开始苟正解

我们是用n表示总人数,a[]这个数组来表示某个队员的实力的。那么我们再把每个组里的人数放入f[]数组,num表示当前是第几个组,而用b[]数组表示某组最大的能力值。首先我们要将所有人按他们的能力值从小到大排序,然后再进行处理:

1、如果存在,也就是使b[j]+1=a[i],那么可以直接插入到J组后面(这里无需考虑是不是最大值,因为前面排过序了,所以必定为最大的),为了能让最小的人数尽可能大,那么应该插入到那个满足条件人数最少的组

2、否则a[i]不可以插入到任何一组,那么就必须新增一组

这也正是我半个小时思考后的结果,于是开始码代码,(为了防止出锅),我花费了1H写这题,因为这个问题具备单调性,所以本来准备写完T4后再加一波二分查找的,但是T4的正解好像没苟出来,于是就把这份代码交上去了(以下码风较丑,因为是考场上写的)

#include<cstdio>
#include<algorithm>
using namespace std;
int a[100005];
struct NODE{
    int lr;
    int ln;
}node[100005];
int main(){
//freopen ("division.in","r",stdin);
//freopen ("division.out","w",stdout);
int n;
    scanf ("%d",&n);
    for (int i=1;i<=n;++i){
        scanf ("%d",&a[i]);
    }
    sort (a+1,a+1+n);
    int len=1,ans=1<<30,j;
    node[1].lr=a[1];node[1].ln=1;
    for (register int i=2;i<=n;++i){
        int find1=1<<30,find2=0;
        for (j=1;j<=len;++j){
            if ((a[i]-node[j].lr==1)||(a[i]-node[j].lr==-1)&&node[j].ln<find1){
                find1=node[j].ln;
                find2=j;
            }
        }
        if (find1==(1<<30)){
            ++len;
            node[len].ln=1;
            node[len].lr=a[i];
        }
        else{
            node[find2].ln++;
            node[find2].lr=a[i];
        }
    }	
    for (register int i=1;i<=len;++i){
        if (node[i].ln<ans) ans=node[i].ln;
    }
    printf ("%d\n",ans);
return 0;
}

然后,我就在考场上切了这题,这种贪心我也不会证明,但是,直觉让我写对了,全班也就两个人AC(%%%ZJFjulao)

强化直觉,就是要靠刷一些贪心来训练直觉,当然也要有数学建模的基础

转载于:https://www.cnblogs.com/smrsky/p/9739202.html

相关文章:

  • 开启新篇章-2018.10.04
  • Unity3D_(物理引擎)Rigidbody组件
  • 四则运算1.0
  • Visiual Studio2012 CLR20r3问题
  • linux 中对 mysql 数据库的基本命令
  • 前端页面添加表格,实现每一行能上下移动,还可修改数据库排序字段值
  • 数字转换(求树的直径)
  • 初识 vue —— 最简单的前后端交互示例
  • [orleans2.1]这是你没玩过的船新版本
  • 微信小程序picker下拉绑定数据
  • UUID、GUID、SID、SUSID
  • gradle 的jar下载到哪里了
  • [luogu4162 SCOI2009] 最长距离(最短路)
  • 034 Maven中的dependencyManagement和dependencies区别
  • 心,不能装太多;人,不能想太多
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 《深入 React 技术栈》
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Babel配置的不完全指南
  • JavaScript 基础知识 - 入门篇(一)
  • js算法-归并排序(merge_sort)
  • MySQL数据库运维之数据恢复
  • python 装饰器(一)
  • Vue官网教程学习过程中值得记录的一些事情
  • XForms - 更强大的Form
  • Xmanager 远程桌面 CentOS 7
  • 大型网站性能监测、分析与优化常见问题QA
  • 使用agvtool更改app version/build
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 微信公众号开发小记——5.python微信红包
  • 温故知新之javascript面向对象
  • 转载:[译] 内容加速黑科技趣谈
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 交换综合实验一
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​VRRP 虚拟路由冗余协议(华为)
  • (12)Linux 常见的三种进程状态
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (C++17) optional的使用
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (分布式缓存)Redis持久化
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)http-server应用
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .Net CF下精确的计时器
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net MVC4 上传大文件,并保存表单
  • .net Signalr 使用笔记
  • .Net Winform开发笔记(一)
  • .NET6 命令行启动及发布单个Exe文件
  • .NetCore部署微服务(二)