洛谷P2134 百日旅行
P2134 百日旅行
题目背景
重要的不是去哪里,而是和你在一起。——小红
对小明和小红来说,2014年7月29日是一个美好的日子。这一天是他们相识100天的纪念日。
(小明:小红,感谢你2场大考时默默的支持,100个日夜的陪伴;感谢你照亮我100个美好的日子,给我留下无数美好的回忆……在这个美好的日子里,我准备带你去旅行。)
题目描述
小明和小红还剩下N天的假期,小明可以安排旅行的计划。如果连续X天旅游,小明需要花旅行费用P*X*X元;如果连续X天不旅游,小明需要请小红吃饭,花费为Q*X元。(P,Q都是输入的常数)
请你帮小明写一个程序,计算出假期里他至少需要花费多少元。
输入输出格式
输入格式:
一行,3个空格隔开的正整数N,P,Q。
输出格式:
一行,一个正整数表示小明至少需要花费多少元。
输入输出样例
6 1 7
20
说明
对于20%数据,N<=20。
对于90%数据,N<=1000,P<=2000,Q<=10000.
对于剩下的10%数据,N<=200000,Q<=P<=10000。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,p,q;
long long ans=;
void dfs(int now,int s1,int s2,long long sum){
if(sum>=ans)return;
if(now==n+){
if(s1)sum+=1LL*s1*s1*p;
if(s2)sum+=1LL*s2*q;
ans=min(ans,sum);
return;
}
if(s2){
dfs(now+,,,sum+1LL*s2*q);
dfs(now+,,s2+,sum);
return;
}
else if(s1){
dfs(now+,,,sum+1LL*s1*s1*p);
dfs(now+,s1+,,sum);
return;
}
else {
dfs(now+,,,sum);
dfs(now+,,,sum);
}
}
int main(){
//freopen("Cola.txt","r",stdin);
scanf("%d%d%d",&n,&p,&q);
dfs(,,,);
cout<<ans;
}
20分 暴力深搜
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int f[],ff[];
int n,m,p,q;
int main(){
scanf("%d%d%d",&n,&p,&q);
for(int i=;i<=n;i++){
f[i]=ff[i]=1e9;
for(int j=;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]));
}
90分 O(n^2)的暴力dp
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
const int N=;
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 ;}
for(int i=;i<=n;i++){
for(int j=g+;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-],ff[i-])+q;
ff[i]=f[g]+(i-g)*(i-g)*p;
}
printf("%d",min(f[n],ff[n]));
}
100分 优化dp O(nlogn)左右
洛谷P2134 百日旅行的更多相关文章
- DP【洛谷P2134】 百日旅行
[洛谷P2134] 百日旅行 题目背景 重要的不是去哪里,而是和你在一起.--小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场 ...
- luogu P2134 百日旅行
题目链接 luogu P2134 百日旅行 题解 dp方程好想吧 优化有些玄学惹 不会证.... 不过我会三分和贪心 \滑稽 但还是写dp吧 代码 #include<cstdio> #in ...
- Java实现 洛谷 Car的旅行路线
输入输出样例 输入样例#1: 1 3 10 1 3 1 1 1 3 3 1 30 2 5 7 4 5 2 1 8 6 8 8 11 6 3 输出样例#1: 47.5 import java.util. ...
- [NOIP2012] 提高组 洛谷P1081 开车旅行
题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 ...
- 洛谷 P3313 [SDOI2014]旅行 解题报告
P3313 [SDOI2014]旅行 题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教 ...
- 洛谷 P3313 [SDOI2014]旅行
题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰. 为了方便,我 ...
- 洛谷P2502[HAOI2006]旅行
题目: Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N个景点(编号为1,2,3,-,N),这些景点被M条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路.也许 ...
- 洛谷 P1081 开车旅行(70)
P1081 开车旅行 题目描述 小AA 和小BB 决定利用假期外出旅行,他们将想去的城市从 11到 NN 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 ii的海 ...
- 洛谷P5022&P5049 旅行(及其数据加强版)
旅行(不是加强版) 加强版 加强版数据范围: 我们注意到 也就是说要么是个树,要么是个基环树 60pts 这60分是个树,可以简单的贪心想到每次都走子树中编号最小的那个,并且把1作为根 dfs练手题 ...
随机推荐
- linux下更改文件夹名
mv 旧文件夹名 新文件夹名 mv /usr/bin/python_old /usr/bin/python_new
- 基于android的GPS移植调用关系【转】
本文转载自:http://blog.csdn.net/jshazk1989/article/details/6877823 版权声明:本文为博主原创文章,未经博主允许不得转载. http://down ...
- PS 滤镜— — 万花筒效果
clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...
- Godot-3D教程-01.介绍3D
创建一个3D游戏将是个挑战,额外增加的Z坐标将使许多用于2D游戏的通用技术不再有用.为了帮助变换(transition),值得一提的是Godot将使用十分相似的API用于2D和3D. 目前许多节点是公 ...
- DCloud-HTML5+:5+ App开发入门指南
ylbtech-DCloud-HTML5+:5+ App开发入门指南 1.返回顶部 1. 5+ App开发入门指南 App App入门 HTML5 Plus应用概述 HTML5 Plus移动App,简 ...
- css3 翻起页脚
html <div class="demo2"> <img src="images/1.jpg"> </div> css . ...
- 用位运算实现四则运算之加减乘除(用位运算求一个数的1/3) via Hackbuteer1
转自:http://blog.csdn.net/hackbuteer1/article/details/7390093 ^: 按位异或:&:按位与: | :按位或 计算机系统中,数值一律用补码 ...
- local_irq_save 与 local_irq_restore
如果你要禁止所有的中断该怎么办? 在2.6内核中,可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理,这两个函数定义在 <asm/system.h>中: void ...
- SpringBoot之导入导出Excel
1.添加springBoot支持 <dependency> <groupId>org.apache.poi</groupId> <artifactId> ...
- QT画矩形
第一次发QT的博文,本人对QT接触没多久,还在入门水平,大牛勿喷哈,之前因为C# (.net framework)做出来的绘制矩形的程序闪的太厉害了,现在用QT重做一个 先上效果图 代码贴全了 #i ...