题目链接:

C - Grid of Lamps

Time Limit:1000MS
Memory Limit: 0KB
#### 问题描述
> We have a grid of lamps. Some of the lamps are on, while others are off. The luminosity of a row/column
> is the number of its lighted lamps. You are given a permutation of the luminosities of the rows and a
> permutation of the columns’. Unfortunately, these values are not accurate but we know at least that
> they are not overestimates. You should tell us the minimum possible number of lighted lamps in this
> grid.
> As an example, consider the following grid. The lighted lamps are shown by 1’s and unlighted ones
> by 0’s.
> 1 0 1 1 0
> 1 1 1 1 1
> 0 0 0 1 1
> 0 1 1 1 0
> 1 0 0 0 0
> The actual luminosities of the rows are . A permutation of them could be 1, 2, 5, 3, 3 >, and the inexact values you’d be given could be .

输入

The first line of input contains an integer T ≤ 100 denoting the number of test-cases. Each test-case

begins with two integers M and N, both in the interval [1, 1000], determining the number of rows and

columns of the grid respectively. The next two lines give the luminosities, the first for rows (M values)

and the second for columns (N values).

输出

For each test-case, on a single line, output the minimum conceivable number of lighted lamps.

样例

sample input

3

2 2

2 0

0 2

1 4

2

1 0 1 1

2 4

3 1

0 2 1 2

sample output

3

3

5

题意

在n*m行的矩阵中

给你每行至少要亮的灯泡和每列至少要亮的灯泡,问至少有多少个灯泡要亮。

题解

在交叉点放越多的灯泡,就能使灯泡数越少。

题目相当于是问现在你能够用每一列的值去消行的值(每一列只能消一次行,剩余的无法消的后面也不能用!),问最多能消掉多少数,贪心的,我们每一次肯定优先消掉最大的k行,因为最大的行是最有可能消不完的。

用一个优先队列来维护,或者消完一次行,就对行重新排一下序也可以。

代码

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std; const int maxn = 1010; int a[maxn], b[maxn];
int n, m; int main() {
int tc;
scanf("%d", &tc);
while (tc--) {
scanf("%d%d", &n, &m);
int sum = 0;
for (int i = 0; i < n; i++) scanf("%d", &a[i]), sum += a[i];
for (int j = 0; j < m; j++) scanf("%d", &b[j]), sum += b[j];
int cnt = 0;
priority_queue<int> pq;
for (int i = 0; i < n; i++) pq.push(a[i]);
int st = 0;
vector<int> tmp;
while (st < m&&pq.top()) {
tmp.clear();
while (!pq.empty()&&pq.top() && b[st]) {
cnt++;
b[st]--;
tmp.push_back(pq.top() - 1);
pq.pop();
}
for (int i = 0; i < tmp.size(); i++) {
pq.push(tmp[i]);
}
st++;
}
printf("%d\n", sum - cnt);
}
return 0;
}

UVA 12382 Grid of Lamps 贪心的更多相关文章

  1. UVA 12382 Grid of Lamps --贪心+优先队列

    题意:给出每行每列至少有的灯泡数,问最少有的灯泡数. 解法:要使灯泡数尽量小,说明要使交叉点尽量多,这样即抵了行,又抵了列,为最优的.所以可以用行来消去列,也可以用列来消去行,我这里是列来消去行.首先 ...

  2. uva 10671 - Grid Speed(dp)

    题目链接:uva 10671 - Grid Speed 题目大意:给出N,表示在一个N*N的网格中,每段路长L,如今给出h,v的限制速度,以及起始位置sx,sy,终止位置ex,ey,时间范围st,et ...

  3. 【NOIP合并果子】uva 10954 add all【贪心】——yhx

    Yup!! The problem name reects your task; just add a set of numbers. But you may feel yourselvesconde ...

  4. uva 11134 fabled rooks (贪心)——yhx

    We would like to place n rooks, 1 n 5000, on a n nboard subject to the following restrictions• The i ...

  5. UVa 11134 (区间上的贪心) Fabled Rooks

    这道题真是WA得我心力交瘁,好讨厌的感觉啊! 简直木有写题解的心情了 题意: n×n的棋盘里,放置n个车,使得任意两车不同行且不同列,且第i个车必须放在给定的第i个矩形范围内.输出一种方案,即每个车的 ...

  6. uva 993 Product of digits (贪心 + 分解因子)

      Product of digits  For a given non-negative integer number N , find the minimal natural Q such tha ...

  7. UVA 11729 - Commando War(贪心 相邻交换法)

    Commando War There is a war and it doesn't look very promising for your country. Now it's time to ac ...

  8. uva 714 - Copying Books(贪心 最大值最小化 二分)

    题目描写叙述开头一大堆屁话,我还细致看了半天..事实上就最后2句管用.意思就是给出n本书然后要分成k份,每份总页数的最大值要最小.问你分配方案,假设最小值同样情况下有多种分配方案,输出前面份数小的,就 ...

  9. UVA 10382 - Watering Grass【贪心+区间覆盖问题+高精度】

    UVa 10382 - Watering Grass n sprinklers are installed in a horizontal strip of grass l meters long a ...

随机推荐

  1. Jquery 计算表格某一列的合计

    <script type="text/javascript"> function heji(table_id, lie, val_id) { //合计 --xpp // ...

  2. js对象,原型,call,apply浅析

    //对象直接量,创建对象最简单的方式是在js里使用对象直接量 var book = { "main title": "js", //属性里有空格,要用引号 &q ...

  3. Revit二次开发-BIM模型导出

    最近一个月一直在研究Revit二次开发-BIM模型的导出,在网上找了很多相关资料学习.下面简单介绍一下我最近做的这个BIM模型的导出功能. 开始尝试使用Revit2015的样例程序里提供的读取模型几何 ...

  4. JavaScript 全局

    JavaScript 全局 JavaScript 全局属性和方法可用于创建Javascript对象. JavaScript 全局属性 属性 描述 Infinity 代表正的无穷大的数值. NaN 指示 ...

  5. 1. 走进java

    走进java 1.java简介 1.1 java分类: 1.2 开发包JDK 1.3.一处编译,到处运行的特点 2. 配置开发环境 3. java基本语法 3.1关键字和保留字 3.2 标识符命名规则 ...

  6. C++ Vector 动态数组

    Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...

  7. linux中的namespace

         本文将就namespace这个知识点,进行简单的归纳总结,力求通俗易通.在资料汇总的过程中,参考了许多网上的博客资料,在文章尾部给出相关链接.      namespace,命名空间,从名字 ...

  8. Linux ThunderBird Exchange 过期

    在Linux上只用Web版处理邮件,就是因为找不到太好的能支持Exchange的邮件客户端.在网上无意中发现了ExQuilla这个Thunderbird的插件,试用了一下还是不错的,很方便,不过只能免 ...

  9. MATLAB light material lighting

    clf;[X,Y,Z]=sphere(40);colormap(jet)subplot(1,2,1),surf(X,Y,Z),axis off square,shading interplight(' ...

  10. PHP性能分析

    内容来自以下站点整理http://jingyan.baidu.com/article/ff4116257e0d5112e48237a0.html关于PHP,很多人的直观感觉是PHP是一种灵活的脚本语言 ...