训练赛复盘 2.7

本文是对一场训练赛的复盘,涉及蓝桥杯算法竞赛中的多个问题,包括礼物分配策略、数字游戏解决方案、朋友圈关系统计、分数统计优化以及点牛问题。通过分析这些问题,探讨了不同的算法思路,如最优化选择、递归与分治、并查集等,并分享了代码实现。
摘要由CSDN通过智能技术生成

问题 A: 礼物

时间限制: 1.000 Sec  内存限制: 512 MB
提交 状态

题目描述

在一个n×n的网格图上,放置着m个礼物,每个礼物有一个价值vi(1≤i≤m),你可以选择一个礼物,然后选择:
(1)取走与它同列的所有礼物,或者(2)取走与它同行的所有礼物
请问所能获取的礼物的最大价值之和是多少?

输入

第一行两个正整数n,m。
之后m行,每行三个整数xi,yi,vi,表示第i个礼物在第xi行,第yi列的格子上(不同礼物可能会在同一个格子),其价值为vi。

输出

一个整数,表示能获取的最大的礼物价值之和。

样例输入 Copy

6 7 
1 3 1 
2 2 2 
2 4 4 
3 3 6 
3 6 3 
5 2 5 
5 4 6

样例输出 Copy

11

提示

样例1解释

选择第5行的任意一个礼物,然后将第5行取完。
【数据范围】
对于40%的数据,1≤n,m≤100
对于70%的数据,1≤n,m≤1000,0<vi≤10000
对于100%的数据,1≤n≤1000,1≤m≤105,1≤xi,yi≤n,vi≤106

 这个题我就直接行列算了 然后比大小 应该有更简单的方法

但还是错了一次因为数据的范围问题。

#include<bits/stdc++.h>
using namespace std;
struct maap
{
    int x;
    int y;
    int v;
};
int main()
{
    int n,m;
    cin>>n>>m;
    maap a[m];
    long long x[n]={0},y[n]={0};
    for(int i=0;i<m;i++)
    {
        cin>>a[i].x>>a[i].y>>a[i].v;
    }
    for(int i=0;i<m;i++)
    {
        x[a[i].x]+=a[i].v;
        y[a[i].y]+=a[i].v;
    }
    sort(x,x+n);
    sort(y,y+n);
    long long maxx=max(x[n-1],y[n-1]);
    cout<<maxx<<endl;
    return 0 ;
}

 

问题 B: 数字游戏

时间限制: 1.000 Sec  内存限制: 512 MB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值