摘要:
区间选点中的区间完全覆盖问题;求解思路如下。1:先根据给出的点的坐标和半径取出其能覆盖的线段范围;假如区间长度8,可选的覆盖线段[2,6],[1,4],[3,6],[3,7],[6,8],[2,4],[3,5]2将每一个区间按照左端点递增顺序排列,拍完序后为[1,4],[2,4],[2,6],[3,5],[3,6],[3,7],[6,8]3设置一个变量表示已经覆盖到的区域。再剩下的线段中找出所有左端点小于等于当前已经覆盖到的区域的右端点的线段中,右端点最大的线段在加入,直到已经覆盖全部的区域4过程:假设第一步加入[1,4],那么下一步能够选择的有[2,6],[3,5],[3,6],[3,7], 阅读全文
摘要:
此题意思给定点集S={(xi,yi)i=1.2.3...n},求用圆心在x轴上,半径为d的圆覆盖S所需的圆的最少个数。1.先把给出的岛的坐标(xi.yi)和半径r转化为在x轴上的区间,即当d-yi>=0时,圆心位于x轴上的区间为Ii=[ xi-sqrt(d^2-yi^2) , xi + sqrt( d^2 - yi^2 )],则转化为区间选点问题。2.S中点(xi,yi),对应一个在x轴上的区间Ii=(li,ri),按照区间右端点ri从小到大排序,在区间集合中选择一个索引最小的区间,把选择的区间和与其相交的所有区间作为一组从T中删除,直到T为空集,此时搜到的组数最大#include< 阅读全文
摘要:
最后是用了最大覆盖方法做的,不会超时,前面注释部分贪心策略估计也许应该错了,求大神帮忙指出 #include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;/*struct point{ int x,y;}p[220];bool cmp(point a,point b){ if(a.y==b.y) return a.x>b.x; return 阅读全文
摘要:
很裸的贪心:按价值从大到小sort一下,然后枚举当前最大价值最多往包里放多少(更新m),累加起来就是结果#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;struct point{ int v,w;}p[15];bool cmp(point a,point b){ return a.v>b.v;}int main(){ int 阅读全文
摘要:
我表示没看懂题目,最后是让队友去看才知道讲的是啥,这英语。。。~ ~题目意思:田忌要和大王赛马,规定赢一场得200钱,输一场输200钱,题目给出n组数据(马的速度),求田忌最多得多少钱贪心的思想(sort一下,把田忌的马和大王的马从小到大排列):1、田慢>王慢,赢王慢一场2、田慢<王慢,输王快一场3、田慢=王慢 :1、田快>王快,赢王快一场 2、田快<王快,田慢输王快一场 3、田快=王快:1、田慢<王快,输王快一场 2、田慢=王快,跳出循环#include<iostream>#include<cstdio>#inc... 阅读全文