题解:

首先有一个比较显然的事情是如果我们确定了买的次数这道题就可以简单的贪心了

但是答案和买的次数是什么关系呢。。

好像是可以三分的 所以应该是单峰的

这里用了模拟退火,而且是没有处理失败情况的模拟退火

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=;
ll total,f,n,ans;
struct re{
ll a,b;
}a[N];
bool cmp(re x,re y)
{
return(x.a<y.a);
}
double Random() { return rand()/(double) RAND_MAX ;}
/*ll judge(ll x)
{
if (x<=0) return 0;
ll xx=total-f*x,day=0,res=0;
for (ll i=1;i<=n;i++)
{
if (log2(x)+log2(a[i].a)>log2(xx))
{
res+=xx/a[i].a;
break;
}
ll num=min(xx/a[i].a/x,a[i].b-day+1);
day+=num; xx-=num*a[i].a*x;
res+=num*x;
}
ans=max(ans,res);
return(res);
}*/
ll judge(ll times)
{
if(times<=) return ;
ll Money = total - times * f;
ll res = , num, day = ;
for(int i=;i<=n;i++)
{
num = min(Money / a[i].a / times, a[i].b - day + );
Money -= num * a[i].a * times;
day += num; res += times * num;
if(day <= a[i].b)
{
num = Money / a[i].a;
res += num;
ans = max(ans, res);
return res;
}
}
ans = max(ans, res);
return res;
}
void sa(double T)
{
ll now=;
while (T>=)
{
ll a=now+(ll)(T*(Random()*-));
if (a<=) a=T*Random();
ll de=judge(a)-judge(now);
if (de>) now=a;
T*=0.97;
}
}
/*void sa(double T)
{
ll Now = 1;
while(T >= 1)
{
ll A = Now + (ll)(T * (Random()*2-1)) ;
if(A<=0) A = T*Random();
ll dE = judge(A) - judge(Now);
if(dE > 0)
Now = A;
T *= 0.97;
} }*/
int main()
{
srand(time()^size_t(new char));
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
ios::sync_with_stdio(false);
while (cin>>total>>f>>n)
{
ans=;
for(ll i=;i<=n;i++)
cin>>a[i].a>>a[i].b;
sort(a+,a+n+,cmp);
ll m=n,d=-;
n=;
for (ll i=;i<=m;i++)
if (a[i].b>d) a[++n]=a[i],d=a[i].b;
sa(total/f+);
cout<<ans<<endl;
}
return ;
}

bzoj 2832的更多相关文章

  1. 【BZOJ】【1067】 【SCOI2007】降雨量

    思路题 玛雅,这分类讨论快讨论地疯了…… 从huzecong神的题解那里得到的灵感…… 首先考虑最好确定的情况:为true的时候,此时必须同时满足 1.x和y这两年的降雨量已知,且rain[x]< ...

  2. BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4399  Solved: 1182 [Submit][Stat ...

  3. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  4. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  5. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  6. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  7. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  8. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

  9. 【清华集训】楼房重建 BZOJ 2957

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

随机推荐

  1. thinkphp验证码不显示

    1.安装php的GD库 yum -y install php-gd 2.在输出图片前header("content-type: image/png"); 写入 header(&qu ...

  2. 4-HTML Computer Code Elements

    HTML Computer Code Elements Tag Description <code> Defines programming code <kbd> Define ...

  3. C/C++ 获取文件大小

    在C语言中测试文件的大小,主要使用二个标准函数. 1.fseek 函数原型:int fseek ( FILE * stream, long int offset, int origin ); 参数说明 ...

  4. Maven多模块项目加载

      Maven多模块项目中如何让Spring运行时成功加载指定的子模块   将子模块pom加入到父模块pom的定义中,并继承父模块   在web.xml中配置加载子模块的Spring配置文件   在启 ...

  5. 使用SimHash进行海量文本去重[转]

    阅读目录 1. SimHash与传统hash函数的区别 2. SimHash算法思想 3. SimHash流程实现 4. SimHash签名距离计算 5. SimHash存储和索引 6. SimHas ...

  6. liunx 安装redis 4.0

    liunx 上安装redis 4.0.1 第一步:将 redis-4.0.1.tar.gz 压缩问上传至/home目录下 第二步: 解压文件  tar -zxvf  redis-4.0.1.tar.g ...

  7. js——this

    每个函数的this是在调用时绑定的,完全取决于函数的调用位置 1. 绑定规则总结 一般情况下,按下列顺序从下至上来判断this的绑定对象(绑定的优先级从下至上递减) 默认:在严格模式下绑定到undef ...

  8. Confluence 6 PostgreSQL 设置准备

    请查看 Supported Platforms 页面来获得 Confluence 系统支持的 PostgreSQL 数据库版本.你需要在安装 Confluence 之前升级你的 PostgreSQL ...

  9. hdu4003

    /*依赖背包的通常做法就是对于每个结点,先处理处其所有子节点的dp,然后对于当前结点进行分组背包dp即可 还是依赖背包问题,dp[i][j]表示结点i的子树用了j个机器人的搜索代价 边界条件,如果某个 ...

  10. vsftpd中的local_umask和anon_umask

    umask是在linux中常见的一个东西,它其实是一个掩码.当然,也有umask这样一个命令,它是对用户建立的文件的默认属性的定义.该 定义为: 假设umask为022,则对于一个文件夹的话,它的默认 ...