CH BR8(小学生放假了-clock()/CLOCKS_PER_SEC-斜率优化常错集锦)
小学生放假了
总时限 | 26s | 内存限制 | 256MB |
---|---|---|---|
出题人 | zsyzzsoft | 提交情况 |
16/150
|
初始分值 | 1500 | 锁定情况 |
背景
我们能见到的最可怕的事情,莫过于小学生放假了!
描述
小学生要放假了!MT学校一共有N个小学生,学校旁边的ET小卖部希望在小学生放假之前做好坑蒙小学生的准备!ET小卖部一共有M个不同的商品,每个商品的价格可以定位任意非负整数,每个商品的数量是无限的。每个小学生有Ci RMB,每人只能购买一个商品,他们希望他们购买的商品尽量贵。小卖部应该如何设定每个商品的价格,使得他们坑蒙小学生的收入尽可能多呢?请输出最多的收入。
输入格式
第一行两个用空格隔开的整数N,M。
紧接着N行,第i+1行一个整数,表示Ci(见题目描述)
输出格式
一个整数,表示最多的收入。
样例输入
5 3 1 3 5 7 9
样例输出
22
样例解释
三个商品的价格分别设置为3RMB,7RMB和9RMB。
第一个小学生由于没有足够的RMB,不购买任何商品;
第二个小学生和第三个小学生只能购买3RMB的商品;
第四个小学生可以购买7RMB的商品;
第五个小学生可以购买9RMB的商品。
3 + 3 + 7 + 9 = 22,所以这种方案获得了22RMB的收入。
可以证明,没有更优的方案。
数据范围与约定
对于100%的数据,1 <= Ci <= 109,1 <= N <= 10000,1 <= M <= 2000。
单点时间限制2s。
来源
原创
斜率优化易错点。。。
1.不等式*(-1),2边都要变号。
2.注意叉积乘爆,切忌bool强转 (bool) t >0
优先级高
3.初值P(0,a[1],0)
4.eps乱用
5.a.y-b.y
a.x=b.x的情况 *inf 注意+,-
否则long double 可能出现真的正负无穷 然后T得惨惨的,还查不出错。。。
能出正解的其实,上面。。。↑
写了一天各种错。。无语了。。后天考试。。考文化。。。坐等爆0。。。。
顺便说一下clock()的用法
clock()/CLOCKS_PER_SEC 返回程序运行开始到执行的时间(单位:s)
卡时间专用。。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (10000+10)
#define MAXM (2000+10)
#define eps 1e-13
#define Read(x) { \while (!isdigit(c=getchar())); \x=c-48; \while (isdigit(c=getchar())) x=x*10+c-48; \}
long long mul(long long a,long long b){return (a*b)%F;}
long long add(long long a,long long b){return (a+b)%F;}
long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;}
typedef long long ll;
int n,m;
char c;
ll a[MAXN];
ll f[MAXM][MAXN]={0},T[MAXN]={0},h[MAXN];
struct P
{int i;long double x,y;P(int _i,ll _x,ll _y):i(_i),x(_x),y(_y){}P(ll _x,ll _y):x(_x),y(_y){}P(){}friend long double kk(P a,P b){if (abs(a.x-b.x)<eps) return (b.y-a.y)*INF;return (b.y-a.y)/(b.x-a.x); }
}st[MAXN];
struct V
{long double x,y;V(ll _x,ll _y):x(_x),y(_y){}V(){}V(P a,P b):x(b.x-a.x),y(b.y-a.y){}//friend bool operator*(V a,V b){return ((long double)a.x/a.y-(long double)b.x/b.y)>eps;}friend long double operator*(V a,V b){/*cout<<a.x*b.y-a.y*b.x<<endl;*/return a.x*b.y-a.y*b.x; }
};
int main()
{
// freopen("input","r",stdin);Read(n) Read(m)For(i,n)Read(a[i])sort(a+1,a+1+n);For(i,n-1) h[i]=(ll)i*a[i+1];
// For(j,n) f[0][j]=0;For(i,m){For(j,n-1) T[j]=f[i-1][j]-h[j];int head=1,tail=1;st[1]=P(0,a[1],0);For(j,n){// cout<<head<<' '<<tail<<endl;while (head^tail&&kk(st[head],st[head+1])>=-j) head++;// cout<<kk(st[head],st[head+1])<<' '<<-j<<endl;int k=st[head].i;f[i][j]=f[i-1][k]+(j-k)*a[k+1];// cout<<i<<' '<<j<<':'<<k<<' '<<f[i][j]<<' '<<f[i-1][k]<<' '<<(j-k)*a[k+1]<<endl;// if (j<n)// {P A=P(j,a[j+1],T[j]);while (head^tail&&V(st[tail-1],st[tail])*V(st[tail],A)>=0) tail--;st[++tail]=A;// }}}//ll ans=0;/*For(i,m){For(j,n) ans=max(ans,f[i][j]);//,cout<<f[i][j]<<' ';cout<<endl;}*/
// cout<<ans<<endl;printf("%lld\n",f[m][n]);//For (j,n) cout<<f[m][j]<<endl;
// cout<<clock()/CLOCKS_PER_SEC<<endl;return 0;
}
CH BR8(小学生放假了-clock()/CLOCKS_PER_SEC-斜率优化常错集锦)相关推荐
- Codeforces 1179D Fedor Runs for President [DP,斜率优化]
Codeforces 思路 考虑把连的那两个点中间的链提出来,那么就会变成一条链,链上的每个点挂着一棵子树的形式. 设那些子树的大小为\(S_1,S2,\cdots\),那么新加的简单路径个数就是 \ ...
- 【洛谷3648】[APIO2014] 序列分割(斜率优化DP)
点此看题面 大致题意: 你可以对一个序列进行\(k\)次分割,每次得分为两个块元素和的乘积,求总得分的最大值. 区间\(DPor\)斜率优化\(DP\) 这题目第一眼看上去感觉很明显是区间\(DP\) ...
- 【BZOJ1010】【HNOI2008】玩具装箱(斜率优化,动态规划)
[BZOJ1010][HNOI2008]玩具装箱 题面 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一 ...
- 洛谷4072 SDOI2016征途 (斜率优化+dp)
首先根据题目中给的要求,推一下方差的柿子. \[v\times m^2 = m\times \sum x^2 - 2 \times sum \times sum +sum*sum\] 所以\(ans ...
- BZOJ-1010 玩具装箱toy (斜率优化)
题目大意:将n个数分成若干组,并且每组的数在原数组中应是连续的,每组会产生的代价为sum(i)-sum(j)+i-j-1-m,m为已知的常数.求最小代价. 题目分析:定义dp(i)表示将前 i 个元素 ...
- HDU-3507Print Article 斜率优化DP
学习:https://blog.csdn.net/bill_yang_2016/article/details/54667902 HDU-3507 题意:有若干个单词,每个单词有一个费用,连续的单词组 ...
- bzoj1560:[JSOI2009]火星藏宝图(斜率优化)
题目描述 在火星游玩多日,jyy偶然地发现了一张藏宝图.根据藏宝图上说法,宝藏被埋藏在一个巨大的湖里的N个岛上(2<=N<=200,000).为了方便描述,地图把整个湖划分成M行M列(1& ...
- COGS-363-土地购买-斜率优化
描述 有 n(≤50000) 块 (Xi*Yi) 的土地. 一些土地的购买价格是这些土地中长的最大值乘宽的最大值 (长宽不可颠倒). 求购买所有土地的最小花费. 将 n 个二元组 (x, y) 分组使 ...
- BZOJ 3203 Luogu P3299 [SDOI2013]保护出题人 (凸包、斜率优化、二分)
惊了,我怎么这么菜啊.. 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=3203 (luogu)https://www.lu ...
最新文章
- 英国JIC院士3.8万英镑招博后-植物代谢物与微生物组-截止6月27日
- Adam Optimization Algorithm
- python lambda ,map详解
- 流水线、超流水线、超标量技术对比
- protoc: error while loading shared libraries: libprotoc.so.8: cannot open shared object file
- Facebook合并WhatsApp和Instagram?德国:展开反垄断调查!
- Extjs ComboBox常用的配置
- PC使用Android端摄像头作为本地摄像头相关软件调研
- 升级ios13后,iPhone手机新增了截长屏功能,实用又方便
- java聊天室课程报告_java课程设计报告(java聊天室).doc
- 计算机打音乐醉赤壁,抖音确认过眼神我遇上对的人是什么歌,醉赤壁歌曲介绍...
- html计算斐波那契数列通项公式,斐波那契数列指标公式
- 5G 时代,AI 如何破竹而出? | AI ProCon
- java计算各个班的平均分
- 嵌入式编程中volatile的重要性
- 网络电话免费打 【推荐】
- 南非世界杯-我在南非(二)
- 第二章:互联网灵魂之TCP/IP(二)
- 【示波器专题】示波器的频响方式
- Java时间处理(UTC时间和本地时间转换)
热门文章
- POJ 1692 Crossed Matchings dp[][] 比较有意思的dp
- 框架升级后某个类型所在程序集发生转移,应用还能正常运行吗?
- 快速排序(交换排序)-八大排序汇总(6)
- Android之利用SharedPreferences进行简单数据存储
- OpenCV-Python 实现两张图片自动拼接成全景图
- v-if、v-for、v-model、v-on
- 为什么python不需要编译_为什么我用Go写机器学习部署平台,而偏偏不用Python?...
- accounts/login/?next=/account/password-change/
- HDOJ 2030-汉字统计
- linux11g导入10g 怎么改版本,Oracle 11g导入到10g引起的错误