Building Shops(dp)

Building Shops

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 3881 Accepted Submission(s): 1306

Problem Description
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’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.
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 1

Sample Output
5
11

Source
2017 Trung Quốc sinh viên trình tự thiết kế thi đua - nữ sinh buổi biểu diễn chuyên đề

Recommend
Gian gzijing2015
dp[i][j] đến đệ i cái sở hoa tiền
dp[i][0] không kiến siêu thị
dp[i][1] kiến siêu thị

#include <stdio.h>
#include <math.h>
#include <queue>
#include <memory.h>
#include <algorithm>
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
ll dp[3003][2],disum[3003][3003];
struct node
{
int x,c;
} a[3003];
int cmp(node a,node b)
{
return a.x<b.x;
}
int main()
{
int n,i,j;
ll z;
while(scanf( "%d",&n)!=EOF)
{
memset(dp,INF,sizeof(dp));
for(i=1; i<=n; i++)
{
scanf( "%d%d",&a[i].x,&a[i].c);
}
sort(a+1,a+n+1,cmp); // chú ý đừng quên bài tự
for(i=1; i<=n; i++) // mỗi hai cái điểm lấy i vì siêu thị
{ //i đến j trung mỗi cái cửa hàng đến i khoảng cách
disum[i][i]=0;
for(j=i+1; j<=n; j++)
{
disum[i][j]=disum[i][j-1]+a[j].x-a[i].x;
}
}
dp[0][0]=dp[0][1]=0;
for(i=1; i<=n; i++)
{
dp[i][1]=min(dp[i-1][0],dp[i-1][1])+a[i].c; // ở i điểm kiến siêu thị
for(j=1; j<=i; j++) // không kiến siêu thị
{ // tìm ở đâu cái j cửa hàng kiến siêu thị tiêu phí nhỏ nhất
dp[i][0]=min(dp[i][0],dp[j][1]+disum[j][i]);
}
}
z=min(dp[n][0],dp[n][1]);
printf( "%lld\n",z);
}
return 0;
}
  • 0
    Điểm tán
  • Dẫm
  • 1
    Cất chứa
    Cảm thấy cũng không tệ lắm? Một kiện cất chứa
  • 0
    Bình luận

“Tương quan đề cử” đối với ngươi có trợ giúp sao?

  • Phi thường không trợ giúp
  • Không trợ giúp
  • Giống nhau
  • Có trợ giúp
  • Phi thường có trợ giúp
Đệ trình
Bình luận
Tăng thêm bao lì xì

Thỉnh điền bao lì xì chúc phúc ngữ hoặc tiêu đề

Cái

Bao lì xì cái số nhỏ nhất vì 10 cái

Nguyên

Bao lì xì kim ngạch thấp nhất 5 nguyên

Trước mặt ngạch trống3.43Nguyên Đi trước nạp phí >
Cần chi trả:10.00Nguyên
Thành tựu một trăm triệu kỹ thuật người!
Lĩnh sau ngươi sẽ tự động trở thành bác chủ cùng bao lì xì chủ fans Quy tắc
hope_wisdom
Phát ra bao lì xì
Thật phóNguyên
Sử dụng ngạch trống chi trả
Điểm đánh một lần nữa thu hoạch
Quét mã chi trả
Tiền bao ngạch trống 0

Để khấu thuyết minh:

1. Ngạch trống là tiền bao nạp phí giả thuyết tiền, dựa theo 1:1 tỉ lệ tiến hành chi trả kim ngạch để khấu.
2. Ngạch trống vô pháp trực tiếp mua sắm download, có thể mua sắm VIP, trả phí chuyên mục cập chương trình học.

Ngạch trống nạp phí