每日一题 6月30日 Growth 离散化+DP

题目链接:https://ac.nowcoder.com/acm/problem/19809
题目大意:
图片说明
思路:
图片说明

#include <bits/stdc++.h>
#define LL long long
using namespace std;

LL x[1005], y[1005], z[1005];
LL a[1005], b[1005], c[1005];
LL s[1005][1005], f[1005][1005], s1[1005][1005], s2[1005][1005];
int main(){

    int n, m; scanf("%d%d", &n, &m);
    for(int i=1; i<=n; i++){
        scanf("%lld%lld%lld", &x[i], &y[i], &z[i]);
        a[i]=x[i], b[i]=y[i];
    }
    sort(a+1, a+n+1); sort(b+1, b+n+1);
    int cnt1=unique(a+1, a+n+1)-a-1;
    int cnt2=unique(b+1, b+n+1)-b-1;
    for(int i=1; i<=n; i++){
        x[i]=lower_bound(a+1, a+cnt1+1, x[i])-a;
        y[i]=lower_bound(b+1, b+cnt2+1, y[i])-b;
        s[x[i]][y[i]]+=z[i];
    }
    for(int i=1; i<=cnt1; i++){
        for(int j=1; j<=cnt2; j++){
            s1[i][j]=s1[i][j-1]+s[i][j];
        }
    }
    for(int j=1; j<=cnt2; j++){
        for(int i=1; i<=cnt1; i++){
            s2[i][j]=s2[i-1][j]+s[i][j];
        }
    }
    LL ans=0;
    for(int i=1; i<=cnt1; i++){
        for(int j=1; j<=cnt2; j++){
            if(a[i]+b[j]<=m){
                f[i][j]=max(f[i-1][j]+s1[i][j]*(m-a[i]-b[j]+1), f[i][j-1]+s2[i][j]*(m-a[i]-b[j]+1));
            }
            ans=max(ans, f[i][j]);
        }
    }
    printf("%lld\n", ans);

    return 0;
}
全部评论

相关推荐

学java时间比较短不到三个月,基本的技术栈都过了一遍就是都不太深,有个小项目。是继续找实习还是沉淀准备秋招呢?找实习的话会花很多时间在八股,放弃的话又怕秋招简历太难看。有无大佬支招
今天java了吗:1.一定要找实习,实习不一定要去,但是找实习过程中的面试经验和心态经验才是最重要的 2.八股本来就是大头,甚至比项目重要 3.这个时间段也是面试比较多的阶段,可以抓住机会锻炼。面试才会发现自己的不足,感觉自己会了和能给面试官娓娓道来是两码事
点赞 评论 收藏
分享
04-25 19:29
已编辑
宁波大学 运营
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
06-07 21:26
江南大学 C++
话不多说,直接上时间线和图片1.2024年10月底发offer,并签三方2.2025年5月底公司违约
从零开始的转码生活:希望所有签了三方但直接违约的公司都倒闭!都倒闭!都倒闭!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务