uva 1632——Alibaba
生活随笔
收集整理的這篇文章主要介紹了
uva 1632——Alibaba
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:直線上有n個點,其中第i個點的坐標是xi,且他會在di秒后消失,阿里巴巴可以從任意位置出發,求訪問過所有節點的最短時間,不能輸出-1;
思路:01背包問題,dp(i,j,0)表示遍歷過i,j區間且最終落在i點的最短時間,dp(i,j,1)是落在j點,然后找到從i和j到達當前的最優值,到達之前點消失則置為INF;
code:
#include <bits/stdc++.h> using namespace std;#define cls(a,c) memset(a,c,sizeof (a)) #define ft(i,s,t) for (int i=s;i<=t;i++) #define frt(i,s,t) for (int i=s;i>=t;i--) const int N=12,M=10005; const int INF=0x3f3f3f3f;int a[M],b[M]; int dp[M][M][2]; int main() {int n;while (~scanf("%d",&n)){ft(i,1,n) scanf ("%d %d",&a[i],&b[i]);frt(i,n,1) ft(j,i+1,n){dp[i][j][0]=min(dp[i+1][j][0]+a[i+1]-a[i],dp[i+1][j][1]+a[j]-a[i]);if (dp[i][j][0]>=b[i]) dp[i][j][0]=INF;dp[i][j][1]=min(dp[i][j-1][1]+a[j]-a[j-1],dp[i][j-1][0]+a[j]-a[i]);if (dp[i][j][1]>=b[j]) dp[i][j][1]=INF;}int ans=min(dp[1][n][0],dp[1][n][1]);if (ans==INF) puts("No solution");else printf("%d\n",ans);} }創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的uva 1632——Alibaba的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都大熊猫繁育研究基地坐几号线
- 下一篇: uva 10163——Storage