#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=0x7f7f7f7f;
const int maxn=10000+10;
int d[maxn][maxn][2],n;
int a[maxn],dl[maxn];
int solve()
{
for(int i=n-1;i>=0;i--)
for(int j=i+1;j<n;j++)
{
d[i][j][0]=min(d[i+1][j][0]+a[i+1]-a[i],d[i+1][j][1]+a[j]-a[i]);
d[i][j][1]=min(d[i][j-1][1]+a[j]-a[j-1],d[i][j-1][0]+a[j]-a[i]);
if(d[i][j][0]>=dl[i]) d[i][j][0]=INF;
if(d[i][j][1]>=dl[j]) d[i][j][1]=INF;
}
return d[0][n-1][0]>d[0][n-1][1]?d[0][n-1][1]:d[0][n-1][0];
}
int main()
{
std::ios::sync_with_stdio(false);
while(cin>>n)
{
memset(d,0,sizeof(d));
for(int i=0;i<n;i++)
cin>>a[i]>>dl[i];
//scanf("%d%d",&a[i],&dl[i]);
int temp=solve();
if(temp!=INF) cout<<temp<<endl;
// printf("%d\n",temp);
else cout<<"No solution"<<endl;
//printf("No solution\n");
}
return 0;
}
UVA 1632(p306)----Alibaba
最新推荐文章于 2018-03-03 13:11:22 发布