UVA 1445 Cubist Artwork

来源:互联网 发布:小米网络音响app 编辑:程序博客网 时间:2024/05/17 00:14
这题和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;}

原创粉丝点击