题解:

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

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

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

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

代码:

  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. const ll N=;
  5. ll total,f,n,ans;
  6. struct re{
  7. ll a,b;
  8. }a[N];
  9. bool cmp(re x,re y)
  10. {
  11. return(x.a<y.a);
  12. }
  13. double Random() { return rand()/(double) RAND_MAX ;}
  14. /*ll judge(ll x)
  15. {
  16. if (x<=0) return 0;
  17. ll xx=total-f*x,day=0,res=0;
  18. for (ll i=1;i<=n;i++)
  19. {
  20. if (log2(x)+log2(a[i].a)>log2(xx))
  21. {
  22. res+=xx/a[i].a;
  23. break;
  24. }
  25. ll num=min(xx/a[i].a/x,a[i].b-day+1);
  26. day+=num; xx-=num*a[i].a*x;
  27. res+=num*x;
  28. }
  29. ans=max(ans,res);
  30. return(res);
  31. }*/
  32. ll judge(ll times)
  33. {
  34. if(times<=) return ;
  35. ll Money = total - times * f;
  36. ll res = , num, day = ;
  37. for(int i=;i<=n;i++)
  38. {
  39. num = min(Money / a[i].a / times, a[i].b - day + );
  40. Money -= num * a[i].a * times;
  41. day += num; res += times * num;
  42. if(day <= a[i].b)
  43. {
  44. num = Money / a[i].a;
  45. res += num;
  46. ans = max(ans, res);
  47. return res;
  48. }
  49. }
  50. ans = max(ans, res);
  51. return res;
  52. }
  53. void sa(double T)
  54. {
  55. ll now=;
  56. while (T>=)
  57. {
  58. ll a=now+(ll)(T*(Random()*-));
  59. if (a<=) a=T*Random();
  60. ll de=judge(a)-judge(now);
  61. if (de>) now=a;
  62. T*=0.97;
  63. }
  64. }
  65. /*void sa(double T)
  66. {
  67. ll Now = 1;
  68. while(T >= 1)
  69. {
  70. ll A = Now + (ll)(T * (Random()*2-1)) ;
  71. if(A<=0) A = T*Random();
  72. ll dE = judge(A) - judge(Now);
  73. if(dE > 0)
  74. Now = A;
  75. T *= 0.97;
  76. }
  77.  
  78. }*/
  79. int main()
  80. {
  81. srand(time()^size_t(new char));
  82. freopen("1.in","r",stdin);
  83. freopen("1.out","w",stdout);
  84. ios::sync_with_stdio(false);
  85. while (cin>>total>>f>>n)
  86. {
  87. ans=;
  88. for(ll i=;i<=n;i++)
  89. cin>>a[i].a>>a[i].b;
  90. sort(a+,a+n+,cmp);
  91. ll m=n,d=-;
  92. n=;
  93. for (ll i=;i<=m;i++)
  94. if (a[i].b>d) a[++n]=a[i],d=a[i].b;
  95. sa(total/f+);
  96. cout<<ans<<endl;
  97. }
  98. return ;
  99. }

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. requests库入门03-get请求

    先看一个没有请求参数的get请求,访问百度首页 import requests r = requests.get('https://www.baidu.com') print(r.status_cod ...

  2. hibernate框架学习第四天:关联关系、外键、级联等

    一对多关联关系表 一方 多方(外键)实体类 一方:TeacherModel 添加多方的集合Set 多方StudentModel 添加一方的对象一方配置关系 name:一方模型中描述多方的集合对象名 c ...

  3. OpenStack实践系列④计算服务Nova

    OpenStack实践系列④计算服务Nova 3.6 Nova控制节点的部署创建服务的凭证,完成下列步骤: 创建nova用户,并加入到service项目中,赋予admin权限 [root@node1 ...

  4. MySQL的连接数

    我使用的数据库,没有针对其进行其他相关设置,最近经常出现连接异常,现象为太多的连接. MySQL查看最大连接数和修改最大连接数 1.查看最大连接数(可通过show variables查看其他的全局参数 ...

  5. HDU 5297

    用x ^ (1 / n) 来求个数,容斥原理 , Num会向后移动, 迭代到不再变化,退出循环 #include<iostream> #include<cstdio> #inc ...

  6. ifconfig和ping

    命令: ifconfig 对应英文: configure a network interface 作用: 查看 / 配置计算机当前的网卡配置信息 安装: sudo apt install net-to ...

  7. spring aop -包的问题

    Caused by: java.lang.NoSuchMethodError: org.springframework.aop.framework.AopProxyUtils.getSingleton ...

  8. 异步io模块

    '''客户端''' import socket,select #####进行封装,将socket对象和要返回的url,和回调函数进行一下封装 class Httprequest(): def __in ...

  9. Jquery简单使用

    展示:$("#id").show(); 隐藏:$("#id").hide();

  10. 18)django-模板的过滤器和tag,自定义simple_tag和filter

    模板过滤器是在变量被显示前修改它的值的一个简单方法. 过滤器使用管道字符 . 模板标签(template tag) .标签(tag)定义比较明确,即: 仅通知模板系统完成某些工作的标签.  一:dja ...