DP【洛谷P3089】 [USACO13NOV]POGO的牛Pogo-Cow
【洛谷P3089】 [USACO13NOV]POGO的牛Pogo-Cow
FJ给奶牛贝西的脚安装上了弹簧,使它可以在农场里快速地跳跃,但是它还没有学会如何降低速度。
FJ觉得让贝西在一条直线的一维线路上进行练习,他在不同的目标点放置了N (1 <= N <= 1000)个目标点,目标点i在目标点x(i),该点得分为p(i)。贝西开始时可以选择站在一个目标点上,只允许朝一个方向跳跃,从一目标点跳到另外一个目标点,每次跳跃的距离至少和上一次跳跃的距离相等,并且必须跳到一个目标点。
每跳到一个目标点,贝西可以拿到该点的得分,请计算他的最大可能得分。
设\(f(i)(j)\)表示第i个点从j转移过来的最优解,朴素\(n^3\)。
正反来两边,特判k=0;
正解单调队列优化,可是我不会。
洛谷上\(n^3\)水过。
我菜我菜。
code:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
const int wx=2017;
inline int read(){
int sum=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0'; ch=getchar();}
return sum*f;
}
struct node{
int x,p;
friend bool operator < (const node & a,const node & b){
return a.x<b.x;
}
}t[wx];
int f[wx][wx];
int n,ans;
signed main(){
n=read();
for(int i=1;i<=n;i++)t[i].x=read(),t[i].p=read();
sort(t+1,t+1+n);
for(int i=1;i<=n;i++)f[i][0]=t[i].p;
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
for(int k=0;k<j;k++){
if(k&&t[j].x-t[k].x<=t[i].x-t[j].x)f[i][j]=max(f[i][j],f[j][k]+t[i].p);
else if(!k)f[i][j]=max(f[i][j],f[j][k]+t[i].p);
}
ans=max(ans,f[i][j]);
}
}
memset(f,0,sizeof f);
for(int i=1;i<=n;i++)t[i].x=t[n].x-t[i].x+1;
sort(t+1,t+1+n);
for(int i=1;i<=n;i++)f[i][0]=t[i].p;
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
for(int k=0;k<j;k++){
if(k&&t[j].x-t[k].x<=t[i].x-t[j].x)f[i][j]=max(f[i][j],f[j][k]+t[i].p);
else if(!k)f[i][j]=max(f[i][j],f[j][k]+t[i].p);
}
ans=max(ans,f[i][j]);
}
}
printf("%lld\n",ans);
return 0;
}
/*
6
5 6
1 1
10 5
7 6
4 8
8 10
*/
DP【洛谷P3089】 [USACO13NOV]POGO的牛Pogo-Cow的更多相关文章
- 【洛谷】2990:[USACO10OPEN]牛跳房子Cow Hopscotch【单调队列优化DP】
P2990 [USACO10OPEN]牛跳房子Cow Hopscotch 题目描述 The cows have reverted to their childhood and are playing ...
- HAOI2006 (洛谷P2341)受欢迎的牛 题解
HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...
- 树形DP 洛谷P2014 选课
洛谷P2014 选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门 ...
- 题解【洛谷P3662】[USACO17FEB]Why Did the Cow Cross the Road II S
本题是练习前缀和的好题!我们可以枚举前端点,确定一个长度为k的区间,然后利用前缀和统计区间内损坏的灯的数量,最后取最小值即可.AC代码: #include <bits/stdc++.h> ...
- 洛谷 3089 [USACO13NOV]POGO的牛Pogo-Cow
单调队列优化dp; 对于每个点开个单调队列,按转移到它的点到它的距离从大到小,得分也从大到小排列. 每次枚举当前点前面的所有点,对于每个点的队列中二分一个距离小于等于它到当前点的答案值,放到当前点的队 ...
- 洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows
P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...
- 洛谷 P3088 [USACO13NOV]挤奶牛Crowded Cows 题解
P3088 [USACO13NOV]挤奶牛Crowded Cows 题目描述 Farmer John's N cows (1 <= N <= 50,000) are grazing alo ...
- 区间DP 洛谷P2858牛奶零食
题目链接 题意:你有n个货物从1-n依次排列,每天可以从两侧选一个出来卖,卖的价格是当天的天数乘该货物的初始价格,问这批货物卖完的最大价格 输入:第一行n,之后是n个货物的初始价值 这道题不能用贪心做 ...
- P1279 字串距离 dp 洛谷
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X ...
随机推荐
- php字符型转整型
$arr = array(0=>1,"aa"=>2, 3, 4); foreach($arr as $key=>$val){ print($key == &quo ...
- elasticsearch的功能及适用场景(2)
1.Elasticsearch的功能 (1)分布式的搜索引擎和数据分析引擎 搜索:百度,网站的站内搜索,IT系统的检索数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些:新闻网站,最近 ...
- linux命令-mount挂载umount卸载
格式化完成之后想写数据 要先挂载 //////////////////////////////////////////////////////////////////// [root@wangshao ...
- python的print字符串的输出
字符串的输出使用print语句,在每个语句的输出的时候我们使用' '和" "来包含字符串比如: 如果有多个字符串的话呢我们需要用”,“来进行连接: 我们不仅可以使用字符来进行输出时 ...
- floyd路径记录
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #in ...
- POJ 1191 棋盘分割 (区间DP,记忆化搜索)
题面 思路:分析公式,我们可以发现平均值那一项和我们怎么分的具体方案无关,影响答案的是每个矩阵的矩阵和的平方,由于数据很小,我们可以预处理出每个矩阵的和的平方,执行状态转移. 设dp[l1][r1][ ...
- Selenium二次封装-Python版本
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from seleni ...
- 使用VBSCRIPT安装字体
根据新系统要求,经常要部署一些原来系统里没有的字体,原先我为了图省事经常会要求用户手动安装字体文件,虽然Windows的易用性做得相当不错,但是仍然要照顾一些不会安装字体的人,其实把这些字体打包进安装 ...
- 624. Maximum Distance in Arrays二重数组中的最大差值距离
[抄题]: Given m arrays, and each array is sorted in ascending order. Now you can pick up two integers ...
- Spring 第一天课程
一. 面试题部分 1. 什么是IOC?什么是DI?他们有什么区别? 答案: IOC,即控制反转.是指将原来程序中自己创建实现类对象的控制权反转到IOC容器中. IOC的别名:依赖注入(DI),DI 是 ...