新的奇巧淫技

原题传送门

众所周知,模拟退火是一种很强大的算法,DP很强,但我模拟退火也不虚,很多题你如果不会的话基本可以拿来水很多分。比如这道题,我用模拟退火可以轻松水过(虽然我是足足交了两页才过)但是没有什么大问题,如果模拟退火还不会,建议先看你谷日报学习一下。剩下的主要就是一些细节,看代码。

#include <bits/stdc++.h>
using namespace std;
#define gc getchar()
#define re register
double st=clock();
int n,tot,ans,x,y;
int I[1000000+10],E[1000000+10];
struct node{
int IQ,EQ;
}a[1000000+10];//定义结构体,方便random_shuffle inline int read(){
int r=0,l=1;char ch=gc;
while(!isdigit(ch)){if(ch=='-')l=-1;ch=gc;}
while(isdigit(ch)){r=(r<<3)+(r<<1)+ch-'0';ch=gc;}
return r*l;
} inline void add(int x,int y){
if(x<0&&y<0)return;//如果两个都是0,都答案没有任何贡献,直接pass
if(x>=0&&y>=0)
return a[++tot]=(node){x,y},void();//如果两个都>0,那么最优解一定会有它,直接加进去即可
if((x<0&&y>0&&abs(x)-y>=rand())||(x>0&&y<0&&abs(y)-x>=rand()))return;//如果两个值是一正一负相差太大可以pass,但一定要注意是>rand(),这样会有一定概率接受这个解,至于为什么,留给读者思考
if(x+y<0)if(exp(-(x+y))>(double)rand()/(double)RAND_MAX)return;//如果两个值相加为0,对答案会有负贡献,但仍要有一定几率接受,好像和上面判重了,因为本人太菜,不知道去掉对不对,所以就写上了~
a[++tot]=(node){x,y};
} inline void solve(){
tot=0;for(re int i=1;i<=n;++i)add(I[i],E[i]);//初始化,重新选取合适牛
random_shuffle(a+1,a+tot+1);//打乱重排
x=0,y=0;
for(re int i=1;i<=tot;++i){
x+=a[i].IQ;y+=a[i].EQ;
if(x<=0&&y<=0)//到此为止,答案已经不合法
if(exp(ans-x-y)>(double)rand()/(double)RAND_MAX)return;//运用模拟退火思想,虽然已经不合法,但考虑后面可能有解加上后就合法,所以有一定概率接受这个解并继续。这也是模拟退火算法的优势
if(x>0&&y>0)ans=max(ans,x+y);//合法的话,更新答案
}
} int main(){
srand(time(NULL));
n=read();
for(re int i=1;i<=n;++i)I[i]=read(),E[i]=read();//存取各头牛的IQ和EQ,因为上方add时会有删除,因为是随机删除,可能会造成第一次就把最优解中的一头牛删除,然后就挂了,上面我的64分就是这样错的
int crl=15000;
while(crl--)solve();
printf("%d\n",ans);
return 0;
}

random_shuffle大法好

P2340 [USACO03FALL]Cow Exhibition G题解的更多相关文章

  1. USACO07NOV Cow Relays G 题解

    题目 For their physical fitness program, \(N (2 ≤ N ≤ 1,000,000)\) cows have decided to run a relay ra ...

  2. 2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed)

    2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed) [P2886 USACO07NOV]Cow Relays G - 洛谷 | 计算机科学教育新生 ...

  3. POJ2184 Cow Exhibition[DP 状态负值]

    Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12420   Accepted: 4964 D ...

  4. [POJ 2184]--Cow Exhibition(0-1背包变形)

    题目链接:http://poj.org/problem?id=2184 Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  5. Cow Exhibition 变种背包

    Cow Exhibition Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  6. POJ-2184 Cow Exhibition(01背包变形)

    Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10949 Accepted: 4344 Descr ...

  7. POJ 2184 Cow Exhibition【01背包+负数(经典)】

    POJ-2184 [题意]: 有n头牛,每头牛有自己的聪明值和幽默值,选出几头牛使得选出牛的聪明值总和大于0.幽默值总和大于0,求聪明值和幽默值总和相加最大为多少. [分析]:变种的01背包,可以把幽 ...

  8. POJ 2184 Cow Exhibition (01背包变形)(或者搜索)

    Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10342   Accepted: 4048 D ...

  9. poj 2184 Cow Exhibition(01背包)

    Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10882   Accepted: 4309 D ...

随机推荐

  1. 我是如何使用freemarker生成Word文件的?

    推荐:亲身体验,数次踩坑,遂撰写此文,以备各位不时之需. 背景 一天,产品经理递给我了一份word报告,我定睛一看 这个文档有大大小小的标题层级,还有排版好的段落.各种一目了然的饼图.走势图,当然还少 ...

  2. 吴恩达《深度学习》-第三门课 结构化机器学习项目(Structuring Machine Learning Projects)-第一周 机器学习(ML)策略(1)(ML strategy(1))-课程笔记

    第一周 机器学习(ML)策略(1)(ML strategy(1)) 1.1 为什么是 ML 策略?(Why ML Strategy?) 希望在这门课程中,可以教给一些策略,一些分析机器学习问题的方法, ...

  3. 源码解读 TDengine 中线程池的实现

    这篇文章中提到了 tsched 的源码可以一读,所以去阅读了一下,总共220来行. 1. 阅读前工作 通过上文了解到这段程序实现的是一个任务队列,同时带有线程池.这段程序是计算机操作系统里经典的con ...

  4. Linux实战(19):Shell交互式read 用法

    read 用法有好几种,我在实战过程中用到了 -p,记一笔以防不用忘记了. 实例 #!/bin/bash echo "检测IP是否被占用" while read -p " ...

  5. git如何上传文件夹

    git是不支持上传空文件夹的,文件夹里面必须有文件才可以 1.本地仓库上传文件夹到远程 在本地仓库新建一个文件夹,如果里面没有文件,那么$ git push origin master 不能将文件夹p ...

  6. Java反应式框架Reactor中的Mono和Flux

    1. 前言 最近写关于响应式编程的东西有点多,很多同学反映对Flux和Mono这两个Reactor中的概念有点懵逼.但是目前Java响应式编程中我们对这两个对象的接触又最多,诸如Spring WebF ...

  7. 谁说ParameterMap只能读不能写?

    开发过javaweb项目的同学,应该都接触过ServeltRequest吧?ServletRequest接口中有一个方法叫做getParameterMap(),他会返回一个Map<String, ...

  8. GTA5整合版

    GTA5mod整合版游戏介绍 GTA5mod整合版游戏是一款完美破解的游戏,玩家能够在游戏中享受最爽快的角色动作扮演玩法,在这里你将是一名强大的黑帮分子,在这个都市中,你将体验最真实的黑帮社会玩法.G ...

  9. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

  10. C\C++中计时、延时函数

    转载:https://blog.csdn.net/keith_bb/article/details/53055380 C\C++标准库中提供了两种计时函数clock()和time().其用法如下:(1 ...