ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P3173 [HAOI2009]巧克力

2022-07-20 07:02:43  阅读:163  来源: 互联网

标签:node 巧克力 int P3173 后切 STEP 代价 HAOI2009 贪心


https://www.luogu.com.cn/problem/P3173
涉及知识点:贪心,排序
黄色题
  思路:

STEP 1 条件整理

1.对一个长方形横着切n刀,竖着切m刀;

2.每一刀都要花费一定的代价;

3.如果巧克力从一个方向切了w块,那么从另一个方向切的时候就要花费w*x_ixi​的代价;

4.问最小代价是多少。


STEP 2 题意分析

看见STEP 1里的条件4没有?盯着他看,使劲看!求最小啊!最优问题用什么?贪心!​

所以我们可以发现,越是靠后切,所要切的代价的倍数就越大,导致整体代价的上升。

贪心解决方案: 代价高的靠前切,代价小的靠后切。


 

代码:

#include<bits/stdc++.h>//万能头棒棒
using namespace std;
int n,m,nh=1,ns=1;//分别记录n,m以及已切过的横刀数以及竖刀数
long long ans;//记录答案
struct node{
    int w,h;
}c[20001];//储存每一刀的结构体,w为代价,h为刀是横着切还是竖着切
int cmp(node x,node y){
    return x.w>y.w;
}//排序,从大到小
int main(){
    scanf("%d %d",&n,&m);
    for (int i=1;i<=n-1;i++){
        scanf("%d",&c[i].w);
    }
    for (int i=n;i<=n+m-2;i++){
        scanf("%d",&c[i].w);
        c[i].h=1;//标记
    }//输入
    sort(c+1,c+n+m-1,cmp);//排序
    for (int i=1;i<=n+m-2;i++){
        if (c[i].h==0){
            ans+=c[i].w*ns;
            nh++;
        }else{
            ans+=c[i].w*nh;
            ns++;
        }
    }//执行公式
    printf("%lld\n",ans);//输出
    return 0;//好习惯++
}

 

标签:node,巧克力,int,P3173,后切,STEP,代价,HAOI2009,贪心
来源: https://www.cnblogs.com/2elaina/p/16496463.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有