UVA - 1632 Alibaba 区间dp
2017-05-15 22:22
393 查看
题意:给定n个点,其中第i个点的坐标是xi,且它会在di秒后消失。Alibaba可以从任意位置出发,求访问完所有点的最短时间。无解输出No solution。
思路:dp(i,j,0)表示访问完区间[i,j]后停留在i点的最短时间,dp(i,j,1)表示访问完区间[i,j]后停留在j点的最短时间。转移方程如下:
AC代码
如有不当之处欢迎指出!
思路:dp(i,j,0)表示访问完区间[i,j]后停留在i点的最短时间,dp(i,j,1)表示访问完区间[i,j]后停留在j点的最短时间。转移方程如下:
dp[i][j][0] = min(dp[i+1][j][0]+dis[i+1]-dis[i], dp[i+1][j][1]+dis[j]-dis[i]); dp[i][j][1] = min(dp[i][j-1][0]+dis[j]-dis[i], dp[i][j-1][1]+dis[j]-dis[j-1]);
AC代码
#include <cstdio> #include <cmath> #include <cctype> #include <bitset> #include <algorithm> #include <cstring> #include <utility> #include <string> #include <iostream> #include <map> #include <set> #include <vector> #include <queue> #include <stack> using namespace std; #pragma comment(linker, "/STACK:1024000000,1024000000") #define eps 1e-10 #define inf 0x3f3f3f3f #define PI pair<int, int> typedef long long LL; const int maxn = 1e4 + 5; int dp[maxn][maxn][2]; //0-stop at i 1-stop at j int dis[maxn], dead[maxn]; int main() { int n; while(scanf("%d", &n) == 1) { for(int i = 0; i < n; ++i) { scanf("%d%d", &dis[i], &dead[i]); } memset(dp, 0, sizeof(dp)); for(int i = n-1; i >= 0; --i) for(int j = i+1; j < n; ++j) { dp[i][j][0] = min(dp[i+1][j][0]+dis[i+1]-dis[i], dp[i+1][j][1]+dis[j]-dis[i]); if(dp[i][j][0] >= dead[i]) dp[i][j][0] = inf; dp[i][j][1] = min(dp[i][j-1][0]+dis[j]-dis[i], dp[i][j-1][1]+dis[j]-dis[j-1]); if(dp[i][j][1] >= dead[j]) dp[i][j][1] = inf; } int res = min(dp[0][n-1][0], dp[0][n-1][1]); if(res == inf) printf("No solution\n"); else printf("%d\n", res); } return 0; }
如有不当之处欢迎指出!
相关文章推荐
- Alibaba UVA - 1632(区间dp+滚动数组)
- UVA - 1632 Alibaba 区间DP
- UVA-1632 Alibaba (区间DP+滚动数组)
- UVA 1632 Alibaba(区间dp)
- [UVA 1632]Alibaba[区间DP]
- UVA-1632 Alibaba (区间DP)
- UVa 1632 Alibaba (区间dp)
- Uva 1632 alibaba 区间dp
- Alibaba - UVa 1632 dp
- UVA 1632 Alibaba——dp
- UVA 1632 区间DP
- UVa 1632 阿里巴巴(区间DP)
- UVA 1632-Alibaba(DP)
- Uva 10891 Game of Sum(区间DP)
- 【区间dp】【记忆化搜索】UVALive - 3516 - Exploring Pyramids
- UVA 10891 Game of Sum(区间DP)
- uva 1351 - String Compression(区间DP)
- 区间DP UVA 10453 Make Palindrome
- Uva 10891 Game of Sum(区间博弈dp)
- UVA 1362 - Exploring Pyramids(计数问题+区间DP)