Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <queue>
- #include <iostream>
- #include <stdio.h>
- #include <algorithm>
- #include <vector>
- using namespace std;
- const long long inf=1000000000000000000ll;
- long long dp[10010][2];
- long long d[10010][2];
- struct tt{
- long long t;
- long long x;
- };
- tt arr[10010];
- int n;
- int main(){
- while(scanf("%d",&n)!=EOF){
- for(int i=1;i<=n;i++){
- scanf("%lld %lld",&arr[i].x,&arr[i].t);
- }
- for(int i=1;i<=n;i++){
- dp[i][0]=0;
- dp[i][1]=0;
- }
- for(int j=2;j<=n;j++){
- for(int i=1;i<=n-j+1;i++){
- int l=i,r=i+j-1;
- d[i][0]=inf;
- if(dp[i+1][0]<inf){
- d[i][0]=min(d[i][0],dp[i+1][0] + arr[i+1].x-arr[i].x);
- }
- if(dp[i+1][1]<inf){
- d[i][0]=min(d[i][0],dp[i+1][1] + arr[r].x-arr[i].x);
- }
- d[i][1]=inf;
- if(dp[i][0]<inf){
- d[i][1]=min(d[i][1],dp[i][0] + arr[r].x-arr[i].x);
- }
- if(dp[i][1]<inf){
- d[i][1]=min(d[i][1],dp[i][1] + arr[r].x-arr[r-1].x);
- }
- if(d[i][0]>=arr[i].t){
- d[i][0]=inf;
- }
- if(d[i][1]>=arr[r].t){
- d[i][1]=inf;
- }
- }
- for(int i=1;i<=n-j+1;i++){
- dp[i][0]=d[i][0];
- dp[i][1]=d[i][1];
- }
- }
- if(dp[1][0]>=inf && dp[1][1]>=inf ){
- printf("No solution\n");
- } else {
- printf("%lld\n",min(dp[1][0],dp[1][1]));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment