挖金矿
来源:互联网 发布:Js写table 编辑:程序博客网 时间:2024/06/02 08:43
做的第二个01分数规划,二分答案,化简式子移下项就搞定,然后就是怎样验证了,验证理解简单却难想,看代码就能看懂。
还有需要注意的是原题数据对上下边界的要求很高,需额外开大些。
代码如下
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define ll long longusing namespace std;const int size = 2000010;int n,h;ll sum[size];ll a[size];double l,r;void st(){ scanf("%d%d",&n,&h); for(int i = 1 ; i <= n ; i ++) for(int j = 1 ; j <= h ; j ++) scanf("%lld",&a[(i-1)*h+j]) , r = max((double)a[(i-1)*h+j],r); for(int i = 1 ; i <= n ; i ++) for(int j = 1 ; j <= h ; j ++) if(j == 1) sum[(i-1)*h+j] = a[(i-1)*h+j]; else sum[(i-1)*h+j] = sum[(i-1)*h+j-1] + a[(i-1)*h+j];}bool check(double mid){ double mx_sum = 0; for(int i = 1 ; i <= n ; i ++) { double mx = -214748364711ll; for(int j = 1 ; j <= h ; j ++) mx = max(mx,sum[(i-1)*h+j]-j*mid); mx_sum += mx; } if(mx_sum >= 0) return true; return false;}int main(){ st(); while(r - l > 0.00001) { double mid = (l + r) / 2.0; if(check(mid)) l = mid; else r = mid; } printf("%.4lf\n",l); return 0;}/*4 34 3 35 1 62 6 13 2 9*/
0 0
- 挖金矿
- 挖金矿
- JZOJ 4809. 挖金矿
- 【JZOJ4809】挖金矿
- 【JZOJ 4809】挖金矿
- 3079 挖金矿
- 【二分】【挖金矿】
- 机器人挖金矿的动态规划算法
- NOIP提高组【JZOJ4809】挖金矿
- 【NOIP提高组五校联考】挖金矿
- XJOI 挖金矿(01分数规划)
- xjoj挖金矿(二分验证)
- 【脑洞系列】XJOJ 挖金矿
- 动态规划之挖金矿(背包问题)
- 动态规划基础之挖金矿问题
- #微信平台创业金矿怎么挖#观点分享
- 经典的01背包问题(挖金矿)
- 【JZOJ4809】【NOIP2016提高A组五校联考1】挖金矿
- LibreOffice 5.3即将发布!
- python3 and or
- 使用python求解特征值与特征向量
- Leetcode-114. Flatten Binary Tree to Linked List
- C语言——查找二叉树
- 挖金矿
- 跨域解决方案大全
- mysql导入导出
- 从汇编的角度看待const与#define
- JavaScript中的原型继承
- sqlserver freetds配置在 linux上
- 如何用IDEA一步一步开发WebService服务器端
- bzoj1669 Hungry Cows
- 掌握 Linux PC 性能之基准测试