Problem J: GJJ的日常之购物
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 9 Solved: 8
Submit Web Board
Description
一天,GJJ去购物,来到商场门口,GJJ计划要买n个商品,第i个商品的坐标为(xi,yi),重量是wi。
GJJ比较任性,想按照商品编号从小到大的顺序将所有的商品的搬到车里(车在(0,0)的位置);
GJJ可以几个商品一起搬,但在任何时候GJJ手中的商品重量不能超过最大载重C。
商场的过道只有横着的和竖着的。求GJJ行走的最短距离(GJJ的起始位置为(0,0))。
Input
第一行输入一个T(T<=10),表示T组数据。
每组数据第一行为最大载重C(1<=C<=100),商品个数n(n<=100000);
接下来n行,每行为xi,yi,wi,(0<=xi,yi<=100,wi<=C)既商品的坐标和重量
Output
对于每组数据,输出总路径的最短长度。
Sample Input
2
10 4
1 2 3
1 0 3
3 1 4
3 1 4
5 1
1 1 2
Sample Output
14
4
HINT
我们设d[i]为从原点出发,将前i个商品放到车中的最小距离,则:
d[i]=min(d[j]+dist2[j+1]+dist[i]-dist[j+1]+dist2[i])
=min(d[j]-dist[j+1]+dist2[j+1])+dist[i]+dist2[i] (j<i;j+1到i的重量和<=C.)
dist[i]表示从原点出发,依次经过1,2,3。。到i所走的距离
dist2[i]表示从原点直接到i商品的距离,既abs(xi)+abs(yi);
min(d[j]-dist[j+1]+dist2[j+1])要满足j<i;j+1到i的重量和<=C.可以用一个滑动窗口去维护,
最简单的就是优先队列维护,复杂度O(T*n*logn)