BZOJ 2430 [Poi2003]Chocolate(贪心+归并排序)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=2430
【题目大意】
有一块n*m的矩形巧克力,准备将它切成n*m块。
巧克力上共有n-1条横线和m-1条竖线,你每次可以沿着其中的一条横线或竖线将巧克力切开,
无论切割的长短,沿着每条横线切一次的代价依次为y1,y2,…,yn-1,
而沿竖线切割的代价依次为x1,x2,…,xm-1,求将巧克力切割为小单位快需要最小代价
【题解】
我们发现题目等价于有两个集合X,Y,里面有一些数字,现在将两个集合进行归并排序,
每个数字的代价为其数值与(前面不属于同个集合的数字个数+1)的乘积,求最小代价。
我们发现对于同个集合,显然数值大的排序靠前更优,对于不同集合的数,
我们考虑当他们相邻时,交换位置相当于总代价改变他们之间的差值,
显然也是大的数字靠前代价更小一些,所以我们按照从大到小进行归并排序,同时计算答案即可。
【代码】
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=10010;
int n,m,a[N],b[N];
bool cmp(int a,int b){return a>b;}
int main(){
while(~scanf("%d%d",&n,&m)){
for(int i=1;i<n;i++)scanf("%d",&a[i]);
for(int i=1;i<m;i++)scanf("%d",&b[i]);
sort(a+1,a+n+1,cmp);
sort(b+1,b+m+1,cmp);
int posa=1,posb=1,ans=0;
for(int i=1;i<n+m-1;i++){
if(posb>m&&posa<=n||a[posa]>b[posb])ans+=a[posa++]*posb;
else ans+=b[posb++]*posa;
}printf("%d\n",ans);
}return 0;
}
BZOJ 2430 [Poi2003]Chocolate(贪心+归并排序)的更多相关文章
- bzoj 2430: [Poi2003]Chocolate 贪心
发现每一次切割都会使另一方向所有切割次数++. 而每一刀的代价就是 cost*切割次数,故贪心按照cost从大到小排序即可. #include <bits/stdc++.h> #defin ...
- 【bzoj2430】[Poi2003]Chocolate 贪心
题目描述 有一块n*m的矩形巧克力,准备将它切成n*m块.巧克力上共有n-1条横线和m-1条竖线,你每次可以沿着其中的一条横线或竖线将巧克力切开,无论切割的长短,沿着每条横线切一次的代价依次为y1,y ...
- bzoj 2016: [Usaco2010]Chocolate Eating【二分+贪心】
二分答案,贪心判断,洛谷上要开long long #include<iostream> #include<cstdio> using namespace std; const ...
- BZOJ 1029 建筑抢修 贪心+堆
又搞了一晚上OI,编了两道BZOJ和几道NOI题库,临走之前写两篇感想 noip越来越近了,韩大和clove爷已经开始停课虐我们了... 1029: [JSOI2007]建筑抢修 Time Limit ...
- [bzoj 2151]种树(贪心)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2151 分析:原型是bzoj 1150(CTSC 2007) 首先DP无法下手,想到贪心.想到贪 ...
- BZOJ.5397.circular(随机化 贪心)
BZOJ 感觉自己完全没做过环上选线段的问题(除了一个2-SAT),所以来具体写一写qwq. 基本完全抄自remoon的题解qwq... (下标从\(0\sim m-1\)) 拆环为链,对于原线段\( ...
- 449A - Jzzhu and Chocolate 贪心
一道贪心题,尽量横着切或竖着切,实在不行在交叉切 #include<iostream> #include<stdio.h> using namespace std; int m ...
- BZOJ 2016: [Usaco2010]Chocolate Eating
题目 2016: [Usaco2010]Chocolate Eating Time Limit: 10 Sec Memory Limit: 162 MB Description 贝西从大牛那里收到了 ...
- BZOJ 2016: [Usaco2010]Chocolate Eating( 二分答案 )
因为没注意到long long 就 TLE 了... 二分一下答案就Ok了.. ------------------------------------------------------------ ...
随机推荐
- 换行符 \r \n \r\n 在不同系统下的区别
'\r'是回车,前者使光标到行首,(carriage return)'\n'是换行,后者使光标下移一格,(line feed)\r 是回车,return\n 是换行,newline对于换行这个动作,u ...
- Open Compute Project
Open Compute Project https://github.com/opencomputeproject https://github.com/floodlight/floodlight ...
- Win10打开照片提示“无效的注册表值”解决方法
1.点开开始菜单,右键单击,选择“以管理员运行”[键盘win键+R]输入PowerShell. 2.输入Get-AppxPackage *photo* | Remove-AppxPackage后回车. ...
- python traceback
1. Python中的异常栈跟踪 之前在做Java的时候,异常对象默认就包含stacktrace相关的信息,通过异常对象的相关方法printStackTrace()和getStackTrace()等方 ...
- python初学-元组、集合
元组: 元组基本和列表一样,区别是 元组的值一旦创建 就不能改变了 tup1=(1,2,3,4,5) print(tup1[2]) ---------------------------------- ...
- pom报错解决方法大全
1.Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom 解决方法: Windows: CMD --> c ...
- linux命令(16):mv命令
移动文件:mv /mnt/test.log /home 移动目录:mv -f /mnt/test /home [带-f参数如目的已存在同名文件,则直接覆盖掉] 文件改名:mv /mnt/test /m ...
- C入门之一
1.stdio.h不要写错成studio.h 2. #include <stdio.h> int main() { /* 我的第一个 C 程序 */ printf("Hello, ...
- 基于rest_framework和redis实现购物车的操作,结算,支付
前奏: 首先,要在主机中安装redis,windows中安装,下载一个镜像,直接进行下一步的安装,安装成功后,在cmd中输入redis-cli 安装python的依赖库: redis 和 ...
- HP自动检查html标签是否闭合
function HtmlClose($body) { $strlen_var = strlen($body); // 不包含 html 标签 if (strpos($body, '<') == ...