zoukankan      html  css  js  c++  java
  • 【贪心】8.29题解-cut

    cut


    题目描述

    出于某些方面的需求,我们要把一块N×M的木板切成一个个1×1的小方块。
    对于一块木板,我们只能从某条横线或者某条竖线(要在方格线上),而且这木板是不均匀的,从不同的线切割下去要花不同的代价。而且,对于一块木板,切割一次以后就被分割成两块,而且不能把这两块木板拼在一起然后一刀切成四块,只能两块分别再进行一次切割。
    现在,给出从不同的线切割所要花的代价,求把整块木板分割成1×1块小方块所需要耗费的最小代价。

    输入输出

    输入
    输入文件第一行包括N和M,表示长N宽M的矩阵。
    第二行包括N-1个非负整数,分别表示沿着N-1条横线切割的代价。
    第二行包括M-1个非负整数,分别表示沿着M-1条竖线切割的代价。
    输出
    输出一个整数,表示最小代价。

    样例

    输入样例
    2 2
    3
    3
    输出样例
    9

    说明

    数据范围
    对于60%的数据,有1 ≤ N ,M≤ 100;
    对于100%的数据,有1 ≤ N,M ≤ 2000。

    思路

    贪心

    1. 将横着切与竖着切的代价从大到小进行排序;
    2. 要保证代价最小,代价大的切得越少越好;
    3. 所以按从大到小的顺序切
    4. 题目说,已经切开成两块的木板只能分别分开操作,这样太麻烦。我们可以将它任看做一块,但是在下次切时将切的代价乘上木块数即可:

    横着切产生的贡献:ans+=w[i]* (竖着切的次数+1)
    竖着切产生的贡献:ans+=w[i]* (横着切的次数+1)
    竖着切的次数+1=横木块的个数·······

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=2010;
    struct data {
    	int w,fg;
    }d[maxn*2];
    int lc[2];
    inline bool cmp(data x,data y) {
    	return x.w>y.w;
    }
    inline int read(){
    	int x=0,w=1;char ch=0;
    	while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
    	if(ch=='-') w=-1,ch=getchar();
    	while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
    	return x*w;
    }
    int main() {
    	freopen("cut.in","r",stdin);
    	freopen("cut.out","w",stdout); 
    	int n,m;
    	n=read();
    	m=read();
    	for(int i=1; i<n; i++) {
    		d[i].w=read();
    		d[i].fg=0;
    	}
    	for(int i=1; i<m; i++) {
    		d[i+n-1].w=read();
    		d[i+n-1].fg=1;
    	}
    	sort(d+1,d+1+n+m-2,cmp);
    	int ans=0;
    	for(int i=1; i<=n+m-2; i++) {
    		ans+=(lc[d[i].fg]+1)*d[i].w;
    		lc[d[i].fg^1]++;
    	}
    	printf("%d",ans);
    	return 0;
    }
    
  • 相关阅读:
    Django继承user类来定制自己的user类
    pycharm下载 安装 使用
    360 so动态脱壳
    爱加密so保护简单脱壳测试
    菜鸟 学注册机编写之 “sha1”
    海海DRM视频保护解密流程分析
    通过CreateThreadpoolWait执行Shellcode
    .net学习--Fastjson反序列漏洞
    .net JavaScriptSerializer反序列化漏洞
    java web安全(自定义Classloader)--服务器端动态解析二进制class文件
  • 原文地址:https://www.cnblogs.com/bbqub/p/7453794.html
Copyright © 2011-2022 走看看