jzoj 1354. 【2011.12.24普及模拟】土地购买
2016-08-12 21:09
501 查看
1354. 【2011.12.24普及模拟】土地购买(acquire.pas/cpp)
(File IO): input:acquire.in output:acquire.out
时间限制: 1000 ms 空间限制: 262144KB 具体限制
Goto ProblemSet
题目描述
农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 5,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000,000; 1 <= 长 <= 1,000,000).每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. 如果FJ买一块3x5的地和一块5x3的地,则他需要付5x5=25.
FJ希望买下所有的土地,但是他发现分组来买这些土地可以节省经费. 他需要你帮助他找到最小的经费.
输入
第1行: 一个数: N第2..N+1行: 第i+1行包含两个数,分别为第i块土地的长和宽
输出
第一行: 最小的可行费用.
样例输入
4 100 1 15 15 20 5 1 100
样例输出
500
数据范围限制
提示
【输出说明】输入解释:共有4块土地.
输出解释:FJ分3组买这些土地: 第一组:100x1, 第二组1x100, 第三组20x5 和 15x15 plot. 每组的价格分别为100,100,300, 总共500.
贪心
代码如下,自行理解吧。。
var n,i,j:longint; sum:int64; x,y:array[1..5000]of int64; function max(a,b:int64):int64; begin if a>b then exit(a) else exit(b); end; begin assign(input,'acquire.in');reset(input); assign(output,'acquire.out');rewrite(output); readln(n); for i:=1 to n do readln(x[i],y[i]); for i:=1 to n do for j:=1 to n do if i<>j then if (x[i]*y[i]+x[j]*y[j])>(max(x[i],x[j])*max(y[i],y[j])) then begin x[i]:=max(x[i],x[j]); y[i]:=max(y[i],y[j]); x[j]:=0; y[j]:=0; end; for i:=1 to n do sum:=sum+x[i]*y[i]; write(sum); close(input); close(output); end.
相关文章推荐
- jzoj 1353. 【2011.12.24普及模拟】渡河问题
- jzoj 1355. 【2011.12.24普及模拟】珍珠分对
- 【普及模拟】数列 (jzoj)
- jzoj 1577. 【普及模拟】抓猫
- jzoj 1568. 【普及模拟】石子游戏 解题报告
- jzoj 1591. 【普及模拟】游戏
- [jzoj]2248. 【2017.12.02普及组模拟】送快递(二分+set)
- jzoj P2433 【普及_模拟】最短路上的统计
- jzoj 1350. 【2011.12.17普及模拟】流星雨
- 【jzoj】2018.2.1 NOIP普及组——D组模拟赛
- JZOJ__Day 3:【NOIP普及模拟】排序(sort)
- JZOJ __Day 3:【NOIP普及模拟】求和(sum)
- jzoj 1731. 【10.5NOIP普及模拟】sum(sum.pas/cpp)
- JZOJ__Day 10:【普及模拟】【USACO】iCow播放器
- jzoj 1569. 【普及模拟】公共子串 解题报告
- jzoj 1590. 【普及模拟】前缀转后缀
- jzoj 【2014.8.17NOIP普及组模拟】公牛数学
- JZOJ__Day 3:【NOIP普及模拟】数数(count)
- JZOJ__Day 6:【普及模拟】Oliver的成绩(score)
- jzoj 1571. 【普及模拟】过河