uva 1632——Alibaba
生活随笔
收集整理的這篇文章主要介紹了
uva 1632——Alibaba
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題意:直線上有n個(gè)點(diǎn),其中第i個(gè)點(diǎn)的坐標(biāo)是xi,且他會(huì)在di秒后消失,阿里巴巴可以從任意位置出發(fā),求訪問(wèn)過(guò)所有節(jié)點(diǎn)的最短時(shí)間,不能輸出-1;
思路:01背包問(wèn)題,dp(i,j,0)表示遍歷過(guò)i,j區(qū)間且最終落在i點(diǎn)的最短時(shí)間,dp(i,j,1)是落在j點(diǎn),然后找到從i和j到達(dá)當(dāng)前的最優(yōu)值,到達(dá)之前點(diǎn)消失則置為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);} }創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的uva 1632——Alibaba的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 成都大熊猫繁育研究基地坐几号线
- 下一篇: uva 10163——Storage