小学生放假了

总时限 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-斜率优化常错集锦)相关推荐

  1. Codeforces 1179D Fedor Runs for President [DP,斜率优化]

    Codeforces 思路 考虑把连的那两个点中间的链提出来,那么就会变成一条链,链上的每个点挂着一棵子树的形式. 设那些子树的大小为\(S_1,S2,\cdots\),那么新加的简单路径个数就是 \ ...

  2. 【洛谷3648】[APIO2014] 序列分割(斜率优化DP)

    点此看题面 大致题意: 你可以对一个序列进行\(k\)次分割,每次得分为两个块元素和的乘积,求总得分的最大值. 区间\(DPor\)斜率优化\(DP\) 这题目第一眼看上去感觉很明显是区间\(DP\) ...

  3. 【BZOJ1010】【HNOI2008】玩具装箱(斜率优化,动态规划)

    [BZOJ1010][HNOI2008]玩具装箱 题面 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一 ...

  4. 洛谷4072 SDOI2016征途 (斜率优化+dp)

    首先根据题目中给的要求,推一下方差的柿子. \[v\times m^2 = m\times \sum x^2 - 2 \times sum \times sum +sum*sum\] 所以\(ans ...

  5. BZOJ-1010 玩具装箱toy (斜率优化)

    题目大意:将n个数分成若干组,并且每组的数在原数组中应是连续的,每组会产生的代价为sum(i)-sum(j)+i-j-1-m,m为已知的常数.求最小代价. 题目分析:定义dp(i)表示将前 i 个元素 ...

  6. HDU-3507Print Article 斜率优化DP

    学习:https://blog.csdn.net/bill_yang_2016/article/details/54667902 HDU-3507 题意:有若干个单词,每个单词有一个费用,连续的单词组 ...

  7. bzoj1560:[JSOI2009]火星藏宝图(斜率优化)

    题目描述 在火星游玩多日,jyy偶然地发现了一张藏宝图.根据藏宝图上说法,宝藏被埋藏在一个巨大的湖里的N个岛上(2<=N<=200,000).为了方便描述,地图把整个湖划分成M行M列(1& ...

  8. COGS-363-土地购买-斜率优化

    描述 有 n(≤50000) 块 (Xi*Yi) 的土地. 一些土地的购买价格是这些土地中长的最大值乘宽的最大值 (长宽不可颠倒). 求购买所有土地的最小花费. 将 n 个二元组 (x, y) 分组使 ...

  9. BZOJ 3203 Luogu P3299 [SDOI2013]保护出题人 (凸包、斜率优化、二分)

    惊了,我怎么这么菜啊.. 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=3203 (luogu)https://www.lu ...

最新文章

  1. 英国JIC院士3.8万英镑招博后-植物代谢物与微生物组-截止6月27日
  2. Adam Optimization Algorithm
  3. python lambda ,map详解
  4. 流水线、超流水线、超标量技术对比
  5. protoc: error while loading shared libraries: libprotoc.so.8: cannot open shared object file
  6. Facebook合并WhatsApp和Instagram?德国:展开反垄断调查!
  7. Extjs ComboBox常用的配置
  8. PC使用Android端摄像头作为本地摄像头相关软件调研
  9. 升级ios13后,iPhone手机新增了截长屏功能,实用又方便
  10. java聊天室课程报告_java课程设计报告(java聊天室).doc
  11. 计算机打音乐醉赤壁,抖音确认过眼神我遇上对的人是什么歌,醉赤壁歌曲介绍...
  12. html计算斐波那契数列通项公式,斐波那契数列指标公式
  13. 5G 时代,AI 如何破竹而出? | AI ProCon
  14. java计算各个班的平均分
  15. 嵌入式编程中volatile的重要性
  16. 网络电话免费打 【推荐】
  17. 南非世界杯-我在南非(二)
  18. 第二章:互联网灵魂之TCP/IP(二)
  19. 【示波器专题】示波器的频响方式
  20. Java时间处理(UTC时间和本地时间转换)

热门文章

  1. POJ 1692 Crossed Matchings dp[][] 比较有意思的dp
  2. 框架升级后某个类型所在程序集发生转移,应用还能正常运行吗?
  3. 快速排序(交换排序)-八大排序汇总(6)
  4. Android之利用SharedPreferences进行简单数据存储
  5. OpenCV-Python 实现两张图片自动拼接成全景图
  6. v-if、v-for、v-model、v-on
  7. 为什么python不需要编译_为什么我用Go写机器学习部署平台,而偏偏不用Python?...
  8. accounts/login/?next=/account/password-change/
  9. HDOJ 2030-汉字统计
  10. linux11g导入10g 怎么改版本,Oracle 11g导入到10g引起的错误