题目地址:http://vjudge.net/problem/UVALive-4636
对于主视图中每一列,优先放到侧视图中高度一样的地方,其次是比他高的地方
那么也就是,两个视图中,高度一样的可以看成一个柱子,用cnt[i]记录下高度为i的柱子在侧视图中有几个
再主视图的柱子一个一个扫过去,一个一个放
#include <bits/stdc++.h>
using namespace std;
#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)
const int maxn=10+5;
int w[maxn],d[maxn];
int cnt[25];
int main(int argc, char const *argv[])
{
int r,c;
while(scanf("%d%d",&r,&c)==2&&(r+c)){
int sumD=0;
memset(cnt,0,sizeof(cnt));
REP(i,1,r) scanf("%d",&w[i]);
REP(i,1,c) scanf("%d",&d[i]),sumD+=d[i],cnt[d[i]]++;
int sumW=0;
REP(i,1,r){
if(cnt[w[i]]==0) sumW+=w[i];
if(cnt[w[i]]) cnt[w[i]]--;
}
printf("%d\n", sumD+sumW);
}
return 0;
}