先把骨牌按位置x排序,这样往后倒就是往右边传播。然后从左到右扫,定义一个当前能打到的最远坐标mx,只要下一张骨牌的位置<mx,就会被连锁带倒,同时它自身的x+h还能把mx往后推。如此,就能得到一个个完整并相互不影响的连锁块。所以问题就转化成:选前min(连锁块数量,m)个最大的联锁块。 #include<bits/stdc++.h> using namespace std; using ll=long long; using ull=unsigned long long; using ld=long double; using pii=pair<int,int>;...