dp——P2134 百日旅行
来源:互联网 发布:软文写作软件 编辑:程序博客网 时间:2024/04/30 07:39
https://www.luogu.org/problem/show?pid=2134
这个题目显然有一个N^2的做法
#include<cstdio>#include<cstring>#include<iostream>using namespace std;int f[200005],ff[200005];int n,m,p,q;int main(){ scanf("%d%d%d",&n,&p,&q); for(int i=1;i<=n;i++){ f[i]=ff[i]=1e9; for(int j=0;j<i;j++){ f[i]=min(f[i],ff[j]+(i-j)*(i-j)*p); ff[i]=min(ff[i],f[j]+(i-j)*q); } } printf("%d",min(f[n],ff[n]));}
标准的暴力;
我们考虑优化;
显然q<=p的话直接全q就好了;
然后对于ff数组;
直接不枚举了,结合律妥妥的;
然后是f数组;
我们假设i天是在g天开始旅游的;
那么设k < g
f[k]+(i-k)^2*p>f[g]+(i-g)^2*p;
对于第i+1天;
显然
f[k]+(i+1-k)^2*p>f[g]+(i+1-g)^2*p;
所以我们直接枚举g+1~i-1就好了;
时间复杂度貌似nlogn
贼块;
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>using namespace std;const int N=200005;int f[N],ff[N],g;int n,m,p,q;int main(){ scanf("%d%d%d",&n,&p,&q); if(q<=p){printf("%d",q*n);return 0;} for(int i=1;i<=n;i++){ for(int j=g+1;j<i;j++) if(f[g]+(i-g)*(i-g)*p>f[j]+(i-j)*(i-j)*p)g=j; f[i]=min(f[i-1],ff[i-1])+q; ff[i]=f[g]+(i-g)*(i-g)*p; } printf("%d",min(f[n],ff[n]));}
1 0
- dp——P2134 百日旅行
- 【成长】【转贴】百日造就游戏制作人——王世颖作
- 【百日三千】之JAVA细节——短路
- 百日英语行动——ABC英文三阶段
- 旅行商问题 —— 状态压缩DP
- dp——洛谷 P1523 旅行商简化版
- 3进制状态压缩DP——HDU3001 Travelling 旅行商问题
- 状态压缩DP——poj2288 Islands and Bridges 又见旅行商问题
- POJ3311——Hie with the Pie(floyd,状态压缩dp,旅行商)
- [DP]天天去旅行
- 【XSY1596】旅行 期望DP
- vijos1661——旅行-2
- (复习)(转)03进制状态压缩DP——HDU3001 Travelling 旅行商问题
- 旅行商简化版 DP
- 状压DP<旅行商问题>
- 旅行,紫书P269UVa1347(DP)
- 百日祭
- 百日宴
- hello word!!!
- TuLing123聊天机器人PHP之demo
- Andriod Service Bind篇
- sqlite的数据导入导出
- SpringBoot + Swagger2
- dp——P2134 百日旅行
- Jdk1.8新特性之try()catch{}
- php自动转换pfx到pem和cer(dem格式)到pem
- hdu 1754 I Hate It (线段树--求区间最大值)(基础)
- Parking lot
- 在线编辑类软件的试用
- ZOJ Problem Set
- [51nod] 1013 3的幂的和 [逆元][水题]
- 数据库多表左连接