题目 参考 题意:给定n和m,分别代表网格规模和点数,接着给出m个二维坐标的点。输入保证这m个点在横、纵坐标不会冲突。现在给定m个点,求在移动过程中不出现横纵坐标碰撞的情况下,最小的移动次数,使得所有点都在正对角线上(即横坐标等于纵坐标)。 题解:把这m个点看成m个边,(a,b)看成a到b的一条边。转化后发现,当一些点在同一个圈中,则它们需要额外一次的移动。可以这么求解最优解:默认是m次移动,每增加一个圈,需要增加一次移动;每多一些不需移动的点(x,x),则减少一次移动。
#include
using namespace std;
const int maxn = 100010;
int n, m;
int f[maxn];
void init() {
for (int i = 1; i
关注
打赏
热门博文