Uva 11292 The Dragon of Loowater 模拟题
题目大意:你的王国里有一条有n个头的恶龙,你希望雇一些骑士来把它杀死(即砍掉所有的头)。村里有m个骑士可以雇佣,一个能力值为x的骑士可以砍掉恶龙一个直径不超过x的头,且需要支付x个金币。如何雇佣骑士才能砍掉恶龙所有的头,且需要支付的金币最少?注意,一个骑士只能砍一个头(且不能被雇佣两次)。输出最少的花费,如果无解,输出“Loowater is doomed!".
解题报告:模拟题,先把所有的恶龙的头的直径和所有的骑士的能力值排一下序,然后一一从前往后比较,当当前的这个骑士可以砍掉当前的这个头的时候,就雇佣这个骑士。可以先定义两个指针,分别指向当前的恶龙的头和当前的骑士,若雇佣成功,则将两个指针都往后移动一位,若雇佣不成功,则将骑士的指针往后移动一位。

1 #include<cstdio> 2 #include<algorithm> 3 #include<cmath> 4 int main() { 5 int n,m,sum,x[20005],r[20005]; 6 while(scanf("%d%d",&n,&m)&&(n||m)) { 7 for(int i=1;i<=n;++i) 8 scanf("%d",&r[i]); 9 for(int i=1;i<=m;++i) 10 scanf("%d",&x[i]); 11 std::sort(r+1,r+n+1); 12 std::sort(x+1,x+m+1); 13 int y=1,z=1; 14 sum=0; 15 while(1) { 16 if(r[y]<=x[z]) { 17 sum+=x[z]; 18 y++; 19 z++; 20 } 21 if(r[y]>x[z]) 22 z++; 23 if(z>m||y>n) 24 break; 25 } 26 if(sum==0||y!=n+1) 27 printf("Loowater is doomed!\n"); 28 else 29 printf("%d\n",sum); 30 } 31 return 0; 32 }
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 分享4款.NET开源、免费、实用的商城系统