BZOJ 1911 [Apio2010]特别行动队 (斜率优化DP)
2017-09-19 22:00
309 查看
1911: [Apio2010]特别行动队
Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4841 Solved: 2362
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
4-1 10 -20
2 2 3 4
Sample Output
9HINT
又是赤裸裸的斜率优化DP,从给出的公式就可以算出,但是推论的过程实在是太难,写了好几张纸,算了好几节课,就是找不到斜率,这或许就是做斜率DP最尴尬的事情了吧。
首先,很容易得到状态转移方程dp[i]=max(dp[j]+a*(sum[i]-sum[j)^2+b*(sum[i]-sum[j])+c)。然后假设k<j<i,且在k处决策不如在j处决策优,然后就可以得到一个一元二次不等式,下面就是化简问题了,最后得到斜率为:(dp[k]-dp[j]+a*((sum[k])*(sum[k])-(sum[j])*(sum[j]))+b*(sum[j]-sum[k])*1.0)/2.0/(sum[k]-sum[j])/a。
怎么样,这样推出来的斜率绝望吗?我一直觉得我错了,怎么可能这么复杂。然后就是老套路,斜率DP,输出结果。
代码实现:
#include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<cstdio> #define ll long long #define mset(a,x) memset(a,x,sizeof(a)) using namespace std; const double PI=acos(-1); const int inf=0x3f3f3f3f; const double esp=1e-6; const int maxn=1e6+5; const int mod=1e9+7; int dir[4][2]={0,1,1,0,0,-1,-1,0}; ll gcd(ll a,ll b){return b?gcd(b,a%b):a;} ll lcm(ll a,ll b){return a/gcd(a,b)*b;} ll inv(ll b){if(b==1)return 1; return (mod-mod/b)*inv(mod%b)%mod;} ll fpow(ll n,ll k){ll r=1;for(;k;k>>=1){if(k&1)r=r*n%mod;n=n*n%mod;}return r;} ll n,a,b,c,dp[maxn],sum[maxn],q[maxn],head,tail; double get_k(ll k,ll j) { return (dp[k]-dp[j]+a*((sum[k])*(sum[k])-(sum[j])*(sum[j]))+b*(sum[j]-sum[k])*1.0)/2.0/(sum[k]-sum[j])/a; } void DP() { ll i,j,k; head=tail=1; q[tail]=0; for(i=1;i<=n;i++) { while(head<tail&&get_k(q[head+1],q[head])<=sum[i]) head++; dp[i]=dp[q[head]]+a*(sum[i]-sum[q[head]])*(sum[i] b09c -sum[q[head]])+b*(sum[i]-sum[q[head]])+c; while(head<tail&&get_k(q[tail],q[tail-1])>get_k(i,q[tail])) tail--; q[++tail]=i; } } int main() { ll i,j,k,x; while(cin>>n) { cin>>a>>b>>c; mset(dp,0); mset(q,0); mset(sum,0); for(i=1;i<=n;i++) { cin>>x; sum[i]=sum[i-1]+x; } DP(); cout<<dp <<endl; } return 0; }
相关文章推荐
- [apio2010]特别行动队(斜率优化的dp)
- [bzoj 1911][Apio 2010]特别行动队(斜率优化DP)
- BZOJ 1911: [Apio2010]特别行动队 斜率优化dp
- 【BZOJ1911】【APIO2010】特别行动队(斜率优化DP)
- 【bzoj1911】[Apio2010]特别行动队 DP斜率优化
- bzoj1911: [Apio2010]特别行动队 斜率优化DP
- [BZOJ1911][Apio2010]特别行动队(斜率优化dp)
- [省选前题目整理][BZOJ 1911][APIO 2010]特别行动队(斜率优化DP)
- bzoj1911[Apio2010]特别行动队 斜率优化dp
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化dp]
- BZOJ 1911: [Apio2010]特别行动队(斜率优化+DP)
- bzoj 1911: [Apio2010]特别行动队【斜率优化dp】
- 【bzoj1911】[Apio2010]特别行动队 斜率优化dp
- bzoj 1911 [Apio2010]特别行动队(斜率优化+DP)
- [APIO2010]特别行动队(斜率优化dp)
- _bzoj1911 [Apio2010]特别行动队【斜率优化dp】
- 【APIO2010】特别行动队(斜率优化dp)
- 【斜率优化DP】BZOJ1911 [Apio2010]特别行动队
- BZOJ 1911: [Apio2010]特别行动队[斜率优化dp]
- 【BZOJ1911】【Apio2010】特别行动队,斜率优化DP裸题(斜率有单调性)