Chocolate

提供一种比较清新的做法。

思路:贪心。

思考:如果在巧克力上横向切一刀,那么纵向要切的刀数就会加一。如果在巧克力上纵向切一刀,那么横向要切的刀数就会加一。

结论:要先切代价大的,再切代价小的。

做法:横切代价与纵切代价放到一起排序,依次计算需要的代价即可。

#include <bits/stdc++.h>
using namespace std;
struct node{
    int xy;
    bool flag;//flag区分是纵切代价还是横切代价。 
}a[20010];
int cnt[2];//cnt[i]代表在某个方向上已经有多少块巧克力。 
bool cmp(node a,node b){
    return a.xy>b.xy;
}
int main()
{
    int n,m;
    long long ans=0;
    cin>>n>>m;
    n--;
    m--;
    for(int i=1;i<=n;i++)cin>>a[i].xy;
    for(int i=1;i<=m;i++){
        cin>>a[i+n].xy;
        a[i+n].flag=1;
    }
    sort(a+1,a+n+m+1,cmp);
    for(int i=1;i<=n+m;i++) {
        ans+=(long long)a[i].xy*(cnt[!a[i].flag]+1);//用当前方向的代价去乘以另一个方向上的块数。 
        cnt[a[i].flag]++;//切了一刀,块数加一。 
    }
    cout<<ans;
    return 0;
}
posted @   shoot_down  阅读(6)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示