HDU’s n classrooms are on a line ,which can be considered as a number line. Each classroom has a coordinate. Now Little Q wants to build several candy shops in these n classrooms.
The total cost consists of two parts. Building a candy shop at classroom i would have some cost ci. For every classroom P without any candy shop, then the distance between P and the rightmost classroom with a candy shop on P
In each test case, the first line contains an integer n(1≤n≤3000), denoting the number of the classrooms.
In the following n lines, each line contains two integers xi,ci(−109≤xi,ci≤109), denoting the coordinate of the i-th classroom and the cost of building a candy shop in it.
There are no two classrooms having same coordinate. Output For each test case, print a single line containing an integer, denoting the minimal cost. Sample Input
The total cost consists of two parts. Building a candy shop at classroom i would have some cost ci. For every classroom P without any candy shop, then the distance between P and the rightmost classroom with a candy shop on P
's left side would be included in the cost too. Obviously, if there is a classroom without any candy shop, there must be a candy shop on its left side.
Now Little Q wants to know how to build the candy shops with the minimal cost. Please write a program to help him.
Input The input contains several test cases, no more than 10 test cases. Now Little Q wants to know how to build the candy shops with the minimal cost. Please write a program to help him.
In each test case, the first line contains an integer n(1≤n≤3000), denoting the number of the classrooms.
In the following n lines, each line contains two integers xi,ci(−109≤xi,ci≤109), denoting the coordinate of the i-th classroom and the cost of building a candy shop in it.
There are no two classrooms having same coordinate. Output For each test case, print a single line containing an integer, denoting the minimal cost. Sample Input
3 1 2 2 3 3 4 4 1 7 3 1 5 10 6 1Sample Output
5 11
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll inf=1ll<<60;
#define P pair<int,int>
const int N=3000+10;
P p[N];
ll dp[N][N];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//freopen("in.txt","r",stdin);
//cout<<"1"<<endl;
int n;
set<P> s;
while(cin>>n){
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
p[i]=P(x,y);
}
sort(p+1,p+1+n);
dp[1][1]=p[1].second;
for(int i=2;i<=n;i++){
for(int j=1;j<i;j++)
dp[i][j]=dp[i-1][j]+p[i].first-p[j].first;
dp[i][i]=inf;
for(int j=1;j<i;j++)
dp[i][i]=min(dp[i][i],dp[i-1][j]+p[i].second);
}
ll ans=inf;
for(int i=1;i<=n;i++)
ans=min(ans,dp[n][i]);
cout<<ans<<endl;
}
}