#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 10005;
const int INF = 0x3f3f3f3f;
int n, a[maxn], b[maxn], dp[2][maxn][2];
int main() {
while (~scanf("%d", &n)) {
for (int i = 1; i <= n; i++) scanf("%d %d", &a[i], &b[i]);
memset(dp, INF, sizeof(dp));
for (int i = 1; i <= n; i++) dp[0][i][0] = dp[0][i][1] = 0;
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= n - i + 1; j++) {
dp[!(i&1)][j][0] = min(dp[!((i-1)&1)][j+1][0]+a[j+1]-a[j], dp[!((i-1)&1)][j+1][1]+a[j+i-1]-a[j]);
dp[!(i&1)][j][1] = min(dp[!((i-1)&1)][j][0]+a[j+i-1]-a[j], dp[!((i-1)&1)][j][1]+a[j+i-1]-a[j+i-2]);
if (dp[!(i&1)][j][0] >= b[j]) dp[!(i&1)][j][0] = INF;
if (dp[!(i&1)][j][1] >= b[j+i-1]) dp[!(i&1)][j][1] = INF;
}
}
int ans = min(dp[!(n&1)][1][0], dp[!(n&1)][1][1]);
if (ans >= INF) printf("No solution\n");
else printf("%d\n", ans);
}
return 0;
}
#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;
}
UVA 1632 Alibaba——dp
原创
©著作权归作者所有:来自51CTO博客作者软糖酱八号机的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
UVA 1632 Alibaba(区间dp)
题意:告诉你n 个点位置和消失的时间,你可以从任意一个点出
区间dp #include 搜索 -
uva 10069(dp)
题意:两个字符串a和b, 题解:#include #include const int N = 10005;const int M = 105;char str1[
uva dp i++ 字符串 #include -
uva 10564(dp)
题意:一个漏斗形的图形每个方块内都有值,然后给出一个目标值,要求从第一行走到最后一行,使一整条路径上所有值的和是目标值,打印路径条数
dp uva i++ 打印路径 #include -
uva 357(dp)
题意:之前有很多题解:
dp uva #include i++ 递归 -
uva 348(dp)
题意:n个矩阵liancheng题解:
dp uva i++ #include 矩阵链乘 -
uva 11404(dp)
题意:有一个字符串,需要删除尽量少的 std;c
dp uva #include 回文串 i++