需要推出一个很奇妙的性质,知道了这个性质之后这道题就是道简单区间dp了。

就是一段区间[i,j]必须从2个端点之一开始按,仔细想想确实是这样的,比赛的时候贪心不出dp顺序,还以为是搜索(还是思维太弱了……)

这样设置状态dp[i][l][0]为区间[i,i+l]先取第一个所需的最短时间

dp[i][l][1]为区间[i,i+l]先取最后一个所需的最短时间

然后状态方程为dp[i][l][0]=min(dp[i+1][l-1][0]+D[i+1]-D[i],dp[i+1][l-1][1]+D[i+l]-D[i]);

dp[i][l][1]=min(dp[i][l-1][0]+D[i+l]-D[i],dp[i][l-1][1]+D[i+l]-D[i+l-1]);

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=210;
const int inf=1<<30;
int n;
int T[maxn],D[maxn];
int dp[maxn][maxn][2];
int first;
void print(int p,int l,int d)
{if(l==0){if(first){first=0;printf("%d",p+1);}else printf(" %d",p+1);return;}int t=(d==0?p:p+l-1);if(first){first=0;printf("%d",t+(d==0?1:2));}else printf(" %d",t+(d==0?1:2));if(dp[p][l][d]==dp[p+(d^1)][l-1][d]+D[t+1]-D[t]) print(p+(d^1),l-1,d);else print(p+(d^1),l-1,d^1);
}
int main()
{//freopen("in.txt","r",stdin);while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++) scanf("%d",&T[i]);for(int i=0;i<n;i++) scanf("%d",&D[i]);for(int i=0;i<n;i++) dp[i][0][0]=dp[i][0][1]=0;for(int l=1;l<n;l++){for(int i=0;i+l<n;i++){int &d0=dp[i][l][0],&d1=dp[i][l][1];d0=d1=inf;if(dp[i+1][l-1][0]+D[i+1]-D[i]<T[i])d0=min(d0,dp[i+1][l-1][0]+D[i+1]-D[i]);if(dp[i+1][l-1][1]+D[i+l]-D[i]<T[i])d0=min(d0,dp[i+1][l-1][1]+D[i+l]-D[i]);if(dp[i][l-1][0]+D[i+l]-D[i]<T[i+l])d1=min(d1,dp[i][l-1][0]+D[i+l]-D[i]);if(dp[i][l-1][1]+D[i+l]-D[i+l-1]<T[i+l])d1=min(d1,dp[i][l-1][1]+D[i+l]-D[i+l-1]);//cout<<i<<" "<<l<<" "<<d0<<" "<<d1<<endl;}}if(dp[0][n-1][0]>=T[0] && dp[0][n-1][1]>=T[n-1]) puts("Mission Impossible");else{first=1;if(dp[0][n-1][0]<T[0]) print(0,n-1,0);else print(0,n-1,1);puts("");}}return 0;
}

trainging contest#1(2011大连现场赛)C BY bly相关推荐

  1. trainging contest#1(2011大连现场赛)I BY bly

    先因式分解,记录所有的因子 然后直接容斥即可,四次方和公式:n*(n+1)*(2*n+1)*(3*n^2+3*n-1)/30 #include <iostream> #include &l ...

  2. trainging contest#1(2011大连现场赛)G BY bly

    AC自动机+状压DP,这个相当明显 状态设置为dp[len][u][st]表示在自动机内走了len步后,位于结点u,经过的pattern的状态为st时,所能取得的最大value. 然后就很容易得出状态 ...

  3. trainging contest#2(2011成都现场赛)D BY bly

    这种dp其实不算难,状态什么的都不难想,就是需要用SPFA写,不然就会莫名奇妙的WA 昨天用dp写,怎么改都是WA,确切的说应该说是记忆化搜就WA 今天改成用SPFA就过了,还有我把堆优化的dij和S ...

  4. trainging contest#2(2011成都现场赛)A BY bly

    额,这题我想了半场也没有想出来,思维是硬伤-- 比赛的时候只是想到了,减1和合并都只算一个操作数,唯一的例外是减掉一个1时,算两个操作数. 于此同时减去最后一个1时只算一个操作数. 设状态为dp[i] ...

  5. trainging contest#2(2011成都现场赛)G BY bly

    一道AC自动机+DP,因为单词可能重复,所以记录结点信息的需要是以个vector,然后dp的时候需要递归的更新dp值,因为一个结点可能为多个单词的结尾. #include <iostream&g ...

  6. 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)

    http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...

  7. 2016ACM/ICPC亚洲区大连站现场赛题解报告

    此文章可以使用目录功能哟↑(点击上方[+]) 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原本过的人数比较多的题结果重现过的变少了,而原本现场赛全场过的人最少的题重现做 ...

  8. 2011 ACM/ICPC 北京现场赛 B HouYi's secret

    周日起床后看见QQ群消息说 bupt上有半同步北京现场赛试题,就进入看了下题,一共读了两个题 A和B(因为这两个题目当时就都提交的很多) A题不会做,有限制的生成树的这类知识好像还没有接触过... B ...

  9. 2011年国赛B题论文研读

    本文知识点速查 0-1规划.线性加权评价.权重确定 一.2011年国赛B题的要求 2011年国赛B题的概括如下. 试就某市(有六个区,分别为A,B,C,D,E,F)设置交巡警服务平台的相关情况,建立数 ...

最新文章

  1. [转]多级配方处理的简洁方式
  2. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-7主节点CM安装子节点Agent配置...
  3. Linux中进行用户UID测试导致系统报错
  4. dubbo系列(一)
  5. 欢乐纪中某A组赛【2019.7.6】
  6. 重置mysql+密码_MySQL重置root密码的几种方法(windows+Linux)
  7. 880 芯片组 服务器 cpu,顶级双核处理器对决 皓龙880完胜至强
  8. php读取gitlab用户信息,gitlab api获取所有用户的记录
  9. 《神探tcpdump第八招》-linux命令五分钟系列之四十二
  10. 【牛腩】FreeTextBox
  11. linux gt240驱动下载,NV显卡Linux驱动195.36.08版发布
  12. “人在囧途”今年少有的国产好电影
  13. react骨架屏自动生成_网页骨架屏自动生成方案(dps)
  14. 动画制作·边学习边做动画·从零开始的动画世界
  15. 关于windows10系统,玩英雄联盟加载无响应问题的解决办法
  16. MathType 6.9中积分符号不显示该怎样解决
  17. 分布式系统之道:Lamport 逻辑时钟
  18. 最后一个问题得到解决
  19. unity_NGUI动态字体制作与字体清晰的几点要素
  20. 历年英语作文模板解析

热门文章

  1. 社交营销还是要走到线下
  2. 【银行笔试题】技术+业务,综合题类
  3. 内网穿透的技术解决方案
  4. springboot异步和切面_SpringBoot强化篇(八)-- Spring AOP
  5. win7 ie10代理设置不能用 设置完代理后点确定 回头再打开代理设置对钩并没有选上
  6. php54_php5.4官方下载|
  7. 利用github pages做免费静态网站个人免费域名空间
  8. webpack开发配置API代理proxy,解决跨域问题
  9. 一个小小的互联网创业狗的自白
  10. 一个ADC做多个按键扫描检测