题目链接:hdu 3045 Picnic Cows

题意:

  1. 有n个奶牛分别有对应的兴趣值,现在对奶牛分组,每组成员不少于t,
  2. 在每组中所有的成员兴趣值要减少到一致,问总共最少需要减少的兴趣值是多少。

题解:

  1. 分析:
    先对n个数进行排序,则可以分析出分组成员一定是连续的
    dp[i]表示前i个数得到的最少值
    则:从j~i作为一组
    dp[i]=dp[j-1]+sum[i]-sum[j-1]-(i-j+1)*s[j];//sum[i]表示前i个数的和
    =>dp[i]=dp[j-1]+sum[i]-sum[j-1]+(j-1)*s[j]-i*s[j];
    由于有i*s[j]这一项,所以无法直接在扫描数组的过程中用单调队列维护:
    dp[j-1]-sum[j-1]+(j-1)*s[j]-i*s[j]的最小值。
    考虑用斜率dp!
    假定k<j<=i-t以j~i作为一组比以k~i作为一组更优
    则:
    dp[j-1]+sum[i]-sum[j-1]-(i-j+1)*s[j] <= dp[k-1]+sum[i]-sum[k-1]-(i-k+1)*s[k]
    =>dp[j-1]+sum[i]-sum[j-1]+(j-1)*s[j]-i*s[j] <= dp[k-1]+sum[i]-sum[k-1]+(k-1)*s[k]-i*s[k]
    =>(dp[j-1]-sum[j-1]+(j-1)*s[j] - (dp[k-1]-sum[k-1]+(k-1)*s[k]))/(s[j]-s[k])<=i;//保证s[j]>=s[k]
    令:
    y1 = dp[j-1]-sum[j-1]+(j-1)*s[j]
    y2 = dp[k-1]-sum[k-1]+(k-1)*s[k]
    x1 = s[j]
    x2 = s[k]
    所以变成了:
    (y1 - y2)/(x1 - x2) <= i;
    斜率!
    只需要维护这个斜率即可

以上转自stephen博客

 #include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
typedef long long ll; const int N=5e5+;
int n,t,Q[N];
ll sum[N],s[N],dp[N]; ll get_y(int j,int k)
{
return dp[j-]-sum[j-]+(j-)*s[j]-(dp[k-]-sum[k-]+(k-)*s[k]);
} ll get_x(int j,int k){return s[j]-s[k];} int check(int i,int j,int k)//获取更优的点
{
return get_y(i,j)*get_x(j,k)<=get_y(j,k)*get_x(i,j);
} int main()
{
while(~scanf("%d%d",&n,&t))
{
F(i,,n)scanf("%lld",s+i);
sort(s+,s++n);
F(i,,n)sum[i]=sum[i-]+s[i];
int en=*t-;
F(i,t,en)dp[i]=sum[i]-i*s[];//从t到2*t-1都只能分到一组里
int head=,tail=,st=*t;
F(i,st,n)
{
while(head<tail&&check(i-t+,Q[tail],Q[tail-]))tail--;
Q[++tail]=i-t+;
while(head<tail&&get_y(Q[head+],Q[head])<=get_x(Q[head+],Q[head])*i)head++;
dp[i]=dp[Q[head]-]+sum[i]-sum[Q[head]-]-(i-Q[head]+)*s[Q[head]];
}
printf("%lld\n",dp[n]);
}
return ;
}

hdu 3045 Picnic Cows(斜率优化DP)的更多相关文章

  1. HDU 3045 - Picnic Cows - [斜率DP]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3045 It’s summer vocation now. After tedious milking, ...

  2. HDU3045 Picnic Cows —— 斜率优化DP

    题目链接:https://vjudge.net/problem/HDU-3045 Picnic Cows Time Limit: 8000/4000 MS (Java/Others)    Memor ...

  3. HDU 3045 Picnic Cows(斜率优化DP)

    Picnic Cows Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  4. hdu 3507 Print Article(斜率优化DP)

    题目链接:hdu 3507 Print Article 题意: 每个字有一个值,现在让你分成k段打印,每段打印需要消耗的值用那个公式计算,现在让你求最小值 题解: 设dp[i]表示前i个字符需要消耗的 ...

  5. HDU 2829 Lawrence(斜率优化DP O(n^2))

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2829 题目大意:有一段铁路有n个站,每个站可以往其他站运送粮草,现在要炸掉m条路使得粮草补给最小,粮草 ...

  6. HDU 3045 Picnic Cows

    $dp$,斜率优化. 设$dp[i]$表示$1$至$i$位置的最小费用,则$dp[i]=min(dp[j]+s[i]-s[j]-(i-j)*x[j+1])$,$dp[n]$为答案. 然后斜率优化就可以 ...

  7. HDU 3045 picnic cows(斜率DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3045 题目大意:有n个数,可以把n个数分成若干组,每组不得小于m个数,每组的价值=除了该组最小值以外每 ...

  8. HDU 3401 Trade(斜率优化dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=3401 题意:有一个股市,现在有T天让你炒股,在第i天,买进股票的价格为APi,卖出股票的价格为BPi,同时最多买 ...

  9. HDU 4258 Covered Walkway 斜率优化DP

    Covered Walkway Problem Description   Your university wants to build a new walkway, and they want at ...

随机推荐

  1. oracle中sys和System的默认密码

    sys:change_on_install system:oracle 如果用pl/sql登录的话,记得在下面用户权限选项选择sysdba,如图所示:

  2. 使用C++做算法时,对内存的管理的办法

    使用C++做算法时,对内存的管理的办法 最近老是在想C++的内存控制机制,查了一些资料所以有点想法,自己记录一下免得以后自己忘了. 1. 需求 在做线性代数的算法时,首要的就实现Matrix这个类.由 ...

  3. mysql 和 mongo db 语法对比

    本文描述了MySQL中的常用SQL语句在MongoDB中的写法,如果你长期使用MySQL而对MongoDB跃跃欲试,这篇简单的文章可以帮助你更快的进入角色.查询:MySQL:SELECT * FROM ...

  4. android 4.2 源码在64位Ubuntu编译

    1.获取Android源代码 Android官网给出了从网上下载源代码的方法,具体流程如下网址所示:http://source.android.com/source/downloading.html ...

  5. 关于CKEditor.NET的安全性错误

    关于CKEditor.NET的安全性错误 一直以来在网站上使用FCKEditor.NET文本编辑器 版本应该算是比较早的一个 在使用过程中基本上没有出现什么问题 但是自服务器的IIS(同样都是IIS6 ...

  6. CF 332A Down the Hatch! 超级水题。。不过题目太长了

    A. Down the Hatch! time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. IOS touch event animation 转动的风车

    最近开始学习IOS的开发,师兄给我提出一个需求:实现一个可拖动的转盘.师兄提示我说利用touch event和UIView animation.经过一两天的折腾边学边做,算是实现了基本功能.这里写写加 ...

  8. HTTP协议 HttpWebRequest和 Socket的一点总结

    HTTP协议 HttpWebRequest和 Socket的一点总结 相信接触过网络开发的人对HTTP.HttpWebRequest.Socket这些东西都不陌生吧.它们之间的一些介绍和关系我这里都忽 ...

  9. LNMP安装与配置

    Nginx与apache.lighttp性能综合对比,如下图:                           注意:关闭rpm默认安装的apache和mysql 1.准备php函数的rpm包 y ...

  10. 分享一套 CodeSmit 代码生成模板。

    分享一套 CodeSmit 代码生成模板. 住博客园 5 年了,以前也发过一些博文,但都在 一天后 / 几周后 / 几年后 将它删了:因为感觉代码写得不好:不清晰或侵入太大,哪怕只有一句侵入. 可是最 ...