题目链接

本题也是区间dp,贪心可证,每一次出发必定是从端点,否则必然有重复,不会是最小值,那我们可以设dpi,j,0/1,0代表从左端点出发,1代表从右端点,因为每次都是从端点出发,状态方程为

dpi,j,0=min(dpi+1,j,0+d[i+1]-d[i], dpi+1,j,1+dp[j]-dp[i])分别表示from i to i+1 to j, from i to j to i+1

dpi,j,1=min(dpi,j-1,1+d[j]-d[j-1], dpi,j-1,0+dp[j]-dp[i])分别表示from j to j-1 to i, from j to i to j-1

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x)&(-x))
typedef long long LL;
typedef pair<int,int> pii; const int maxn = 205;
const int INF = 0x3f3f3f3f;
int dp[maxn][maxn][2], d[maxn], t[maxn], mov[maxn][maxn][2]; void run_case() {
int n;
while(cin >> n) {
for(int i = 1; i <= n; ++i) cin >> t[i];
for(int i = 1; i <= n; ++i) cin >> d[i];
memset(dp, 0, sizeof(dp));
for(int i = n-1; i >= 1; --i) {
for(int j = i+1; j <= n; ++j) { if(dp[i+1][j][0] + d[i+1] - d[i] < dp[i+1][j][1] + d[j] - d[i]) {
dp[i][j][0] = dp[i+1][j][0] + d[i+1] - d[i];
mov[i][j][0] = 0; // from i to i+1
} else {
dp[i][j][0] = dp[i+1][j][1] + d[j] - d[i];
mov[i][j][0] = 1; // from i to j
}
if(dp[i][j][0] >= t[i]) {
dp[i][j][0] = INF;
}
// calculate dp[i][j][1]
if(dp[i][j-1][0] + d[j] - d[i] < dp[i][j-1][1] + d[j] - d[j-1]) {
dp[i][j][1] = dp[i][j-1][0] + d[j] - d[i];
mov[i][j][1] = 0; // from j to i
} else {
dp[i][j][1] = dp[i][j-1][1] + d[j] - d[j-1];
mov[i][j][1] = 1; // from j to j-1
}
if(dp[i][j][1] >= t[j]) {
dp[i][j][1] = INF;
}
}
}
int l=0, r=-1, flag;
if(dp[1][n][0] < INF) {
l = 2, r = n;
flag = mov[1][n][0];
cout << "1";
} else if(dp[1][n][1] < INF) {
l = 1, r = n-1;
flag = mov[1][n][1];
cout << n;
} else {
cout << "Mission Impossible";
}
while(l <= r) {
if(flag) {
cout << " " << r;
flag = mov[l][r][1];
r--;
} else {
cout << " " << l;
flag = mov[l][r][0];
l++;
}
}
cout << "\n";
}
} int main() {
ios::sync_with_stdio(false), cin.tie(0);
cout.flags(ios::fixed);cout.precision(10);
//int t; cin >> t;
run_case();
cout.flush();
return 0;
}

何时区间dp呢?

数据范围一定

需要维护区间状态,不同区间选择造成的影响不同,石子合并,杀狼等

The Last Puzzle ZOJ - 3541的更多相关文章

  1. [ZOJ]3541 Last Puzzle (区间DP)

    ZOJ 3541 题目大意:有n个按钮,第i个按钮在按下ti 时间后回自动弹起,每个开关的位置是di,问什么策略按开关可以使所有的开关同时处于按下状态 Description There is one ...

  2. Multiplication Puzzle ZOJ - 1602

    Multiplication Puzzle ZOJ - 1602 传送门 The multiplication puzzle is played with a row of cards, each c ...

  3. ZOJ 3541 The Last Puzzle(经典区间dp)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3541 题意:有一排开关,有个开关有两个值t和d,t是按下开关后在t秒后会自 ...

  4. ZOJ 1602 Multiplication Puzzle(区间DP)题解

    题意:n个数字的串,每取出一个数字的代价为该数字和左右的乘积(1.n不能取),问最小代价 思路:dp[i][j]表示把i~j取到只剩 i.j 的最小代价. 代码: #include<set> ...

  5. 【转载】ACM总结——dp专辑

    感谢博主——      http://blog.csdn.net/cc_again?viewmode=list       ----------  Accagain  2014年5月15日 动态规划一 ...

  6. 【DP专辑】ACM动态规划总结

    转载请注明出处,谢谢.   http://blog.csdn.net/cc_again?viewmode=list          ----------  Accagain  2014年5月15日 ...

  7. dp专题训练

    ****************************************************************************************** 动态规划 专题训练 ...

  8. 【DP专辑】ACM动态规划总结(转)

    http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强, ...

  9. dp有哪些种类

    dp有哪些种类 一.总结 一句话总结: 二.dp动态规划分类详解 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力.建模抽象能力.灵活度. * ...

随机推荐

  1. django url映射的时候指定默认参数

    使用path或者re_path后,在url中都可以包含参数,而有时候想指定默认的参数,可以通过在urls.py中写两个url都指向同一个视图函数.一个带参数一个不带参数.同时,在视同函数的参数中设置默 ...

  2. jmeter的使用---JDBC

    一.数据库连接配置JDBC Connection Configuration 二.执行sql语句select statement (1)query type类型介绍 select statement: ...

  3. yii2自定义报错页面

    在Yii2版本的advanced高级模板环境中:设置404自定义页面的方法 1.config/main.php文件 'errorHandler' => [ 'errorAction' => ...

  4. Educational Codeforces Round 80 (Rated for Div. 2)C(DP)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ; ][],temp[][]; int ...

  5. HttpClient与TestNG结合

    1.HTTPclient插件的安装 在maven项目的pom.xml中引用HTTPclient包,如下 <dependencies> <dependency> <grou ...

  6. Spring Boot整合EhCache

    本文讲解Spring Boot与EhCache的整合. 1 EhCache简介 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认CacheProvid ...

  7. 谁说程序员没有时间关心女朋友的,Python 教你如何掌握女神情绪变化

    很多人都是在朋友圈装死,微博上蹦迪.微信朋友圈已经不是一个可以随意发表心情的地方了,微博才是! 所以你不要傻傻盯着女神的朋友圈发呆啦!本文教你如何用 Python 自动通知女神微博情绪变化,从今天开始 ...

  8. tarjan-无向图(求割点)

    一.基本概念 1.割点:无向连通图中,如果删除某点后,图变成不连通,则称改点为割点. 2.桥:无向连通图中,如果去掉某条边后,整张无向图会分成两部分(即整张图不连通),这样的一条边成为桥. 3.点双连 ...

  9. centOs安装出现No package git available的解决办法

    来源地址 [http://chinacheng.iteye.com/blog/1825538 ] centos安装git 下载源代码安装后,git clone出现“fatal unable to fi ...

  10. java.lang.NoSuchMethodException: com.sun.tools.javac.util.List.<init>()

    主要原因是import jar包的时候import java.util.List;这个,导致错误