B - Checkout Assistant

Crawling in process...Crawling failedTime Limit:2000MS    Memory Limit:262144KB    64bit IO Format:%I64d & %I64u

​Submit​​​ ​​​Status​​​ ​​​Practice​​​ ​​​CodeForces 19B​

Description

Bob came to a cash & carry store, put n items into his trolley, and went to the checkout counter to pay. Each item is described by its price ci and time ti

Input

The first input line contains number n (1 ≤ n ≤ 2000). In each of the following n lines each item is described by a pair of numbers ti, ci (0 ≤ ti ≤ 2000, 1 ≤ ci ≤ 109). If ti is 0, Bob won't be able to steal anything, while the checkout assistant is occupied with item i.

Output

Output one number — answer to the problem: what is the minimum amount of money that Bob will have to pay.

Sample Input


Input

4
2 10
0 20
1 5
1 3

Output

8

Input

3
0 1
0 10
0 100

Output

111

思路:简单01背包,不过要注意优化,就是题目中有说偷的时间只要1秒,所以当时间大于n秒时,他可以都所以物品,因此只要更新到 n就可以得到正确答案了。

 

仔细想想,记忆化搜索好像也行。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
using namespace std;
const long long oo=1e18;
const int mm=2005;
long long f[mm];
int m,x;
long long y,z;
int main()
{
while(cin>>m)
{
f[0]=0;
for(int i=1;i<mm;i++)
f[i]=oo;
for(int i=0;i<m;i++)
{cin>>x>>y;
int mid;
for(int j=m;j>=0;j--)
{
if(j+x+1<m)mid=j+x+1;///时间大于m时,他可以偷所有物品因此只需到m就行
else mid=m;
if(f[j]+y<f[mid])///更新值
f[mid]=f[j]+y;
}
}
cout<<f[m]<<"\n";
}
}