A题: Don’t Starve
原题链接:https://ac.nowcoder.com/acm/contest/33190/A
题目大意
在二维平面上,有 n ( 1 ≤ n ≤ 2000 ) n(1\le n\le 2000) n(1≤n≤2000) 个位置有食物。从原点出发,每次直线前往其他任意一个有食物的位置收集食物。收集完后再次前往下一个点。每当离开一个有食物的点后,该点的食物就会刷新。并且每次的移动距离必须严格递减。
题解
称食物点间的距离为边权。
为了方便处理 初始从原点开始 这个条件,我们可以考虑反向进行 d p dp dp 。
设状态 d p x dp_x dpx 表示从点 x x x 出发后能达到的最多食物点数,因为是反向 d p dp dp ,我们按边权从小到大枚举边进行转移,这样可以保证每次向前转移时,后面的边权一定是比当前边小的。
转移式显然:
d p x = d p y + 1 dp_x=dp_y+1 dpx=dpy