Painting the Fence(差分数组+前缀和)

该博客介绍了如何利用差分数组和前缀和的方法来解决一个关于分配油漆工刷墙的优化问题。给定墙的宽度和油漆工人数,通过分析每个油漆工的工作范围,找出能覆盖最多墙段的最优组合,从而最大化刷墙的总长度。文章通过具体的解题思路和代码实现,展示了如何应用这两种数据结构来求解此类问题。
摘要由CSDN通过智能技术生成

链接:Painting the Fence

题意:

给一个n,一个q

n代表墙的宽度(米),q代表油漆工的人数

给q对数字,分别代表第i个油漆工刷墙的范围  l[i]~r[i]

只能选q-2个油漆工,问最多可以刷多少米的墙

解析:

用差分数组算出所有油漆工的刷墙效果,遍历每个油漆工(i),减少他刷的范围(-1),用前缀和计算他的范围内有多少个等于1

遍历每个油漆工(j),(i!=j,不能为同一个油漆工),比较从1变成0的个数

ac:

#include<bits/stdc++.h>
#define rep(i,l,r) for(int i=l;i<r;i++)
#define mem(gv) memset(gv,0,sizeof(gv))
#define ll long long
#define MAXN 10005
using namespace std;

int n,m,cnt;
int l[MAXN],r[MAXN],a[MAXN];
int d[MAXN],sum[MAXN];

int main()
{
    memset(a,0,sizeof(a));
    memset(l,0,sizeof(l));
    memset(r,0,sizeof(r));
    
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&l[i],&r[i]);
        a[l[i]]+=1;
        a[r[i]+1]-=1;
    }
    for(int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值