trainging contest#1(2011大连现场赛)C BY bly
需要推出一个很奇妙的性质,知道了这个性质之后这道题就是道简单区间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相关推荐
- trainging contest#1(2011大连现场赛)I BY bly
先因式分解,记录所有的因子 然后直接容斥即可,四次方和公式:n*(n+1)*(2*n+1)*(3*n^2+3*n-1)/30 #include <iostream> #include &l ...
- trainging contest#1(2011大连现场赛)G BY bly
AC自动机+状压DP,这个相当明显 状态设置为dp[len][u][st]表示在自动机内走了len步后,位于结点u,经过的pattern的状态为st时,所能取得的最大value. 然后就很容易得出状态 ...
- trainging contest#2(2011成都现场赛)D BY bly
这种dp其实不算难,状态什么的都不难想,就是需要用SPFA写,不然就会莫名奇妙的WA 昨天用dp写,怎么改都是WA,确切的说应该说是记忆化搜就WA 今天改成用SPFA就过了,还有我把堆优化的dij和S ...
- trainging contest#2(2011成都现场赛)A BY bly
额,这题我想了半场也没有想出来,思维是硬伤-- 比赛的时候只是想到了,减1和合并都只算一个操作数,唯一的例外是减掉一个1时,算两个操作数. 于此同时减去最后一个1时只算一个操作数. 设状态为dp[i] ...
- trainging contest#2(2011成都现场赛)G BY bly
一道AC自动机+DP,因为单词可能重复,所以记录结点信息的需要是以个vector,然后dp的时候需要递归的更新dp值,因为一个结点可能为多个单词的结尾. #include <iostream&g ...
- 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)
http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...
- 2016ACM/ICPC亚洲区大连站现场赛题解报告
此文章可以使用目录功能哟↑(点击上方[+]) 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原本过的人数比较多的题结果重现过的变少了,而原本现场赛全场过的人最少的题重现做 ...
- 2011 ACM/ICPC 北京现场赛 B HouYi's secret
周日起床后看见QQ群消息说 bupt上有半同步北京现场赛试题,就进入看了下题,一共读了两个题 A和B(因为这两个题目当时就都提交的很多) A题不会做,有限制的生成树的这类知识好像还没有接触过... B ...
- 2011年国赛B题论文研读
本文知识点速查 0-1规划.线性加权评价.权重确定 一.2011年国赛B题的要求 2011年国赛B题的概括如下. 试就某市(有六个区,分别为A,B,C,D,E,F)设置交巡警服务平台的相关情况,建立数 ...
最新文章
- [转]多级配方处理的简洁方式
- CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-7主节点CM安装子节点Agent配置...
- Linux中进行用户UID测试导致系统报错
- dubbo系列(一)
- 欢乐纪中某A组赛【2019.7.6】
- 重置mysql+密码_MySQL重置root密码的几种方法(windows+Linux)
- 880 芯片组 服务器 cpu,顶级双核处理器对决 皓龙880完胜至强
- php读取gitlab用户信息,gitlab api获取所有用户的记录
- 《神探tcpdump第八招》-linux命令五分钟系列之四十二
- 【牛腩】FreeTextBox
- linux gt240驱动下载,NV显卡Linux驱动195.36.08版发布
- “人在囧途”今年少有的国产好电影
- react骨架屏自动生成_网页骨架屏自动生成方案(dps)
- 动画制作·边学习边做动画·从零开始的动画世界
- 关于windows10系统,玩英雄联盟加载无响应问题的解决办法
- MathType 6.9中积分符号不显示该怎样解决
- 分布式系统之道:Lamport 逻辑时钟
- 最后一个问题得到解决
- unity_NGUI动态字体制作与字体清晰的几点要素
- 历年英语作文模板解析