hdu 1050 Moving Tables 贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050
下午没事在看一个博客里的贪心专题,虽然没写,不过想了下思路,思路对的就没看了,没思路的或者不一样的看了看。
这道题没什么思路,有的思路写了下不对,就是以结束时间为依据排序,然后每次找尽量多的,这种不对我想可能是因为有一部分是从大号移动到小号的,这样就有重合了。
View Code
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <algorithm> 5 using namespace std; 6 7 int visit[300]; 8 9 int main() 10 { 11 int i,j,k,n,ans,w,x,y; 12 scanf("%d",&k); 13 while (k--) 14 { 15 scanf("%d",&n); 16 memset(visit,0,sizeof(visit)); 17 for (i=1;i<=n;i++) 18 { 19 scanf("%d%d",&x,&y); 20 x=(x-1)/2; 21 y=(y-1)/2; 22 if(x>y) 23 { 24 w=x; 25 x=y; 26 y=w; 27 } 28 for (j=x;j<=y;j++) 29 visit[j]++; 30 } 31 ans=0; 32 for (i=1;i<=200;i++) 33 if(visit[i]>ans)ans=visit[i]; 34 35 printf("%d\n",ans*10); 36 } 37 return 0; 38 }
wa
View Code
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; struct ss { int x,y; }len[300]; int visit[300]; int cmp(ss s,ss t) { if(s.y==t.y)return s.x<t.x; else return s.y<t.y; } int main() { int i,j,k,n,ans,w; scanf("%d",&k); while (k--) { scanf("%d",&n); for (i=1;i<=n;i++) { scanf("%d%d",&len[i].x,&len[i].y); if(len[i].x>len[i].y) { w=len[i].x; len[i].x=len[i].y; len[i].y=w; } visit[i]=0; } sort(len+1,len+1+n,cmp); ans=0; for (i=1;i<=n;i++) if(!visit[i]) { ans++; w=len[i].y; visit[i]=1; for (j=i+1;j<=n;j++) { if(len[j].x>w) { visit[j]=1; w=len[j].y; } } } printf("%d\n",ans*10); } return 0; }