题目链接

大致题意:直线上面有n个点,第i个点坐标为xi,它会在di时间消失,你可以选择从任何位置出发,求访问完所有点的最短时间,无解输出no solution

思路:这有一个难点就是,不知道状态该怎么转移,其实仔细想想之后会发现我们在走的时候一定是一个区间的慢慢扩大,假设第k次之前做的都是完整区间,那么k+1次只能走这个区间右端+1坐在左端-1的这两个点,因为走的时候必须路过

这样的话,状态转移就明确了,他只能从上一个区间左端和右端转移过来.不过问题又来了,区间大小不确定.其实区间大小可以状态转移过去,k+1大小的区间必然是由k大小的区间转移过来

所以用dp[i][j][0]表示左端,dp[i][j][1]表示区间右端,其中i表示当前区间大小,j表示位置,下面是我优化了内存

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#include<cstdlib>
#include<algorithm>
#include<stack>
#include<map>
#include<queue>
#include<vector>
using namespace std;
const int maxn = 1e4+10;
const int INF = 0x3f3f3f3f;
int p[maxn],t[maxn],dp[2][maxn][2],n,ans;
int main(){
while(cin>>n){
for(int i=1;i<=n;i++) cin>>p[i]>>t[i];
for(int i=1;i<=n;i++) dp[0][i][0]=dp[0][i][1]=0;
int x,nx=0;
for(int i=1;i<n;i++){
x=nx;nx^=1;
for(int j=1;j<=n-i;j++){
//0->left 1->right dp[nx][j][0]=min(dp[x][j+1][0]+p[j+1]-p[j],dp[x][j+1][1]+p[j+i]-p[j]);
dp[nx][j][1]=min(dp[x][j][0]+p[j+i]-p[j],dp[x][j][1]+p[i+j]-p[i+j-1]);
if(dp[nx][j][0]>=t[j]) dp[nx][j][0] = INF;
if(dp[nx][j][1]>=t[i+j]) dp[nx][j][1] = INF;
}
}
ans = min(dp[nx][1][0],dp[nx][1][1]);
if(ans>=INF) cout<<"No solution\n";
else cout<<ans<<"\n"; }
return 0;
}

UVA1632_Alibaba的更多相关文章

随机推荐

  1. FWT公式一览

    总表 真值表 对应运算 FWT IFWT A=B=0 A≠B A=B=1 左项 右项 左项 右项 0 0 1 & L+R R L-R R 0 1 0 ^ L+R L-R (L+R)/2 (L- ...

  2. Android深度探索-卷1第二章心得体会

    这章介绍了搭建Android开发环境的的搭建,主要是在Linux上搭建Android开发环境总体来说因为都是在Linux下开发的,so,只介绍了在Linux环境下的搭建在搭建过程中全是命令操作,和Wi ...

  3. jQuery的toggle事件

    $(function () {    //默认隐藏   $("#SelTime").hide();  $("#SeniorSel").toggle(      ...

  4. 爬取拉勾网所有python职位并保存到excel表格 对象方式

    # 1.把之间案例,使用bs4,正则,xpath,进行数据提取. # 2.爬取拉钩网上的所有python职位. from urllib import request,parse import json ...

  5. Cocos2d-x之UI控件简介

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 在Cocos2d-x中提供了一种UI控件,UI控件是指用户交互界面的操作部件.UI控件可以是Button(按钮),CheckBox(选择框 ...

  6. C/C++语言for循环语句执行顺序

    for循环如下: ; i<; ++i) { } 执行顺序如下: 1.i=0  初始化初值 2.i<10 进行判断,如果条件为真,则继续执行 3.执行循环体代码 4.i++ 变量i自增 5. ...

  7. C#实体类get和set的作用

    一,实体类属性访问存在两种写法: //第一种写法 private int _id; public int Id { set { _id = value; } get { return _id; } } ...

  8. redis 主从复制+读写分离+哨兵

    1.redis读写分离应用场景 当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能.redis ...

  9. SQL数据库—<6>存储过程

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  10. 【记录】docker 安装redis

    docker拉取镜像 docker pull redis docker 启动redis docker run -dit -p 6379:6379 --name redis redis:latest - ...