hdu 贪心(hdu 2037,hdu 1051,hdu 1050)
hdu 2037 今年暑假不AC (http://acm.hdu.edu.cn/showproblem.php?pid=2037)
比较经典的贪心问题之一,以结束时间排序,如果下一个时间的开始时间大于等于上一个事件结束时间,那么结果就加一。

1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 using namespace std; 6 struct node 7 { 8 int start; 9 int end; 10 }s[105]; 11 bool cmp(node a,node b) 12 { 13 return a.end<b.end; 14 } 15 int main() 16 { 17 //freopen("input.txt","r",stdin); 18 //freopen("output.txt","w",stdout); 19 int n; 20 int i; 21 while(scanf("%d",&n)!=EOF) 22 { 23 if(n==0) break; 24 for(i=0;i<n;i++) 25 { 26 scanf("%d%d",&s[i].start,&s[i].end); 27 28 } 29 sort(s,s+n,cmp); 30 31 // for(i=0;i<n;i++) 32 // printf("%d %d\n",s[i].start,s[i].end); 33 34 int num=1; 35 int p=0; 36 for(int j=1;j<n;j++) 37 { 38 if(s[j].start>=s[p].end) 39 { 40 num++; 41 p=j; 42 43 } 44 45 } 46 printf("%d\n",num); 47 48 } 49 return 0; 50 }
hdu 1051 Wooden Sticks(http://acm.hdu.edu.cn/showproblem.php?pid=1051)
将木棍的长度和重量排序,然后设计一个二重循环一边遍历所有木棍一边更新,并在这个二重循环中统计需要的最少时间。

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define N 5003 7 struct node 8 { 9 int length; 10 int weight; 11 int mark; 12 }s[N]; 13 bool cmp(node a,node b) 14 { 15 16 if(a.length!=b.length) 17 return a.length<b.length; 18 else 19 return a.weight<b.weight; 20 } 21 int main() 22 { 23 //freopen("input.txt","r",stdin); 24 // freopen("output.txt","w",stdout); 25 int t; 26 scanf("%d",&t); 27 while(t--) 28 { 29 int n; 30 scanf("%d",&n); 31 int i,j; 32 memset(s,0,sizeof(s)); 33 for(i=0;i<n;i++) 34 { 35 36 scanf("%d%d",&s[i].length,&s[i].weight); 37 } 38 sort(s,s+n,cmp); 39 int num=0;//统计时间 40 for(i=0;i<n;i++)//遍历每个木棍 41 { 42 if(s[i].mark==1) continue;//如果该木棍考虑过了,进行下一个 43 num++;//时间数加一 44 int a=s[i].length,b=s[i].weight; 45 for(j=0;j<n;j++)//寻找长度和重量比第i个木棍大的木棍 46 { 47 if(s[j].mark==1) continue; 48 if(s[j].length>=a&&s[j].weight>=b) 49 { 50 s[j].mark=1; 51 a=s[j].length;b=s[j].weight;//这里一定要记得更新,刚开始忘记更新wrong了 52 } 53 54 } 55 56 57 } 58 printf("%d\n",num); 59 } 60 return 0; 61 62 }
hdu 1050 Moving Tables(http://acm.hdu.edu.cn/showproblem.php?pid=1050)
用一个数组num(范围为1-200)记录移动桌子所经过位置的次数,每次移动桌子经过位置i时,num[i]都加一,这样输出最大的num[i]即可。

1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 using namespace std; 6 int main() 7 { 8 int t; 9 scanf("%d",&t); 10 while(t--) 11 { 12 int n; 13 scanf("%d",&n); 14 int num[205]; 15 memset(num,0,sizeof(num)); 16 int i; 17 for(i=0;i<n;i++) 18 { 19 int a,b; 20 scanf("%d%d",&a,&b); 21 a=(a+1)/2;b=(b+1)/2; 22 if(a>b) 23 swap(a,b); 24 int j; 25 for(j=a;j<=b;j++) 26 num[j]++; 27 } 28 int ans=0; 29 for(i=1;i<=200;i++) 30 if(ans<num[i]) 31 ans=num[i]; 32 printf("%d\n",ans*10); 33 } 34 return 0; 35 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?