超市
成绩 | 100 | 开启时间 | 2020年06月18日 星期四 17:20 |
折扣 | 0.8 | 折扣时间 | 2020年06月18日 星期四 17:20 |
允许迟交 | 是 | 关闭时间 | 2020年06月18日 星期四 17:20 |
输入文件 | supermarket.in | 输出文件 | supermarket.out |
【题目描述】超市(supermarket)POJ 1456
一个超市有一个待售商品集合Prod,集合中每一个商品都有一个最晚销售时间,每一个产品都需要一个单独的单位时间销售(即两件商品不能同时销售),一个销售计划是一个有序子集Sell,Sell≤Prod,根据子集中的顺序,每一个商品都能在规定时间前销售出去。一个销售计划的利润则为Sell中的所有商品的利润和。
比如,如果Prod={a,b,c,d},(pa,da)=(50,2),(pb,db)=(10,1),(pc,dc)=(20,2), (pd,dd)=(30,1),其中pi表示商品i的价值,di表示商品i的最晚销售时间。比如一个销售计划Sell={d,a},d在0开始1时刻结束销售,a在1开始2时刻结束销售,所有商品都在规定时间前完成了销售,其利润为80,其他销售计划如表8.1所示。
表8.1
计划表 |
利润 |
{a} |
50 |
{b} |
10 |
{c} |
20 |
{d} |
30 |
{b,a} |
60 |
{a,c} |
70 |
{c,a} |
70 |
{b,c} |
30 |
{d,a} |
80 |
{d,c} |
50 |
写一个程序,来计算一个Prod的最大利润销售计划是多少利润。
【输入格式】
一组数据以一个整数n(0≤n≤10 000)开始,接下来有n对pi,di(1≤pi≤10 000,1≤di≤10 000),数与数之间有空格隔开。
【输出格式】
每组数据一行,输出最大利润是多少。
【输入样例】
4
50 2
10 1
20 2
30 1
7
20 1
2 1
10 3
100 2
8 2
5 20
50 10
【输出样例】
80
185