http://www.2cto.com/kf/201310/253108.html
o(n+m)的复杂度 水
龙有n个头 m个骑士 能力值为x的骑士可以砍掉龙的一个半径不超过x的头 要花x的money 求最小花费砍光头 不行输出Loowater is doomed!
#include<stdio.h> #include<algorithm> using namespace std; #define maxn 200010 int a[maxn],b[maxn]; int main() { int n,m; while(scanf("%d%d",&n,&m)==2) { if (m == 0 && n == 0) break; for(int i=0; i<n; i++) scanf("%d",&a[i]); for (int j=0; j<m; j++) scanf("%d",&b[j]); sort(a,a+n); sort(b,b+m); int cur=0; int cost=0; for (int i=0; i<m; i++) //ÆïÊ¿ { if(b[i]>=a[cur]) { cost+=b[i]; if(++cur==n) break; } } if(cur<n)printf("Loowater is doomed! "); else printf("%d ",cost); } return 0; }