这题和434差不多,434多了一个求最大能多叠多少个块而保持这个轮廓
*
* UVA1445.cpp
*
* Created on: Jun 17, 2013
* Author: root
*/
#include <iostream>
#include <cstdio>
#include <memory.h>
#include <algorithm>
using namespace std;
const int maxn = 11;
int n, m;
int sq[maxn][maxn], front[maxn], rightt[maxn];
int used[maxn];
int main(){
int T;
while(1){
scanf("%d %d", &n, &m);
if(!n && !m)break;
memset(sq, 0, sizeof(sq));
memset(used, 0, sizeof(used));
for (int i = 0; i < n; ++i){
scanf("%d", &front[i]);
}
for (int i = 0; i < m; ++i){
scanf("%d", &rightt[i]);
}
int ansN = 0, ansM = 0;
for (int i = 0; i < n; ++i){
int idx = -1, ff = 0;
for (int j = 0; j < m; ++j){
if(rightt[j] == front[i]){
idx = j;
ff = 1;
if(!used[j]){
used[j] = 1;
idx = j;
break;
}
}else if(rightt[j] > front[i] && !ff){
idx = j;
}
}
if(idx != -1){
sq[i][idx] = front[i];
}
}
for (int i = 0; i < m; ++i){
int fl = 0;
for (int j = 0; j < n; ++j){
if(sq[j][i] == rightt[i]){
fl = 1;
break;
}
}
if(fl == 0){
int idx = -1, ff = 0;
for (int j = 0; j < n; ++j){
if(front[j] == rightt[i]){
idx = j;
ff = 1;
if(!used[j]){
used[j] = 1;
idx = j;
break;
}
}else if(front[j] > rightt[i] && !ff){
idx = j;
break;
}
}
if(idx != -1){
sq[idx][i] = rightt[i];
}
}
}
for (int i = 0; i < n; ++i){
for (int j = 0; j < m; ++j){
ansN += sq[i][j];
}
}
printf("%d\n", ansN);
}
return 0;
}