51 nod 1625 夹克爷发红包【贪心、二进制枚举】

2 篇文章 0 订阅
1 篇文章 0 订阅

1625 夹克爷发红包

题意:

1.给你一个 n m 列的二维矩阵,代表每个人的初始红包值。
2.夹克爷可以至多给 k 行 / 列的每个人发红包,每一个价值为 x,同时会覆盖掉初始红包。
3.求所有人的最大红包值总和。
4.数据范围 1n101m2001x1090kn+m

思路:

1.可以看到行最多只有10行,所以可以用二进制暴力枚举行,1代表给该行发超级红包。
2.每次枚举,除去超级红包的行 (num) ,累计每一列的红包总和,扔进优先队列。
3.这时至多还能 发 knum 个超级红包,每次拿最小列值 que.top() x×(nnum) 比较,累计较大值。
4.累计剩余的列,返回结果,维护最大值。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int mp[20][210];
LL col[210];
int n, m, x, k;
int calbit(int x) {
    int sum = 0;
    while(x) {
        if(x & 1) sum++;
        x >>= 1;
    }
    return sum;
}
LL update(int sta) {
    int num = calbit(sta);
    if(num > k) return 0;
    memset(col, 0, sizeof(col)); //累计剩余行中,每一列的和
    LL sum = 0;
    for(int j = 0; j < n; ++ j) {
        if((sta & (1 << j))) {
            sum += 1LL * x * m;
        } else {
            for(int k = 0; k < m; ++ k)
                col[k] += mp[j][k];
        }
    }
    priority_queue<LL, vector<LL>, greater<LL> >que;
    //存除去更新的行后,每一列的值,从小到大弹出
    for(int k = 0; k < m; ++ k)
        que.push(col[k]);
    int ls = k - num;
    LL dig = 1LL * x * (n - num);
    //最多更新ls次
    for(int j = 0; j < ls; ++ j) {
        if(que.empty()) break;
        sum += max(que.top(), dig);
        que.pop();
    }
    //剩余的列弹出来
    while(!que.empty()) sum += que.top(), que.pop();
    return sum;
}
int main() {
    scanf("%d%d%d%d", &n, &m, &x, &k);
    LL ans = 0;
    for(int i = 0; i < n; ++ i) {
        for(int j = 0; j < m; ++ j) {
            scanf("%d", &mp[i][j]);
            ans += mp[i][j];
        }
    }
    //枚举行
    for(int sta = 0; sta < (1 << n); ++ sta) {
        ans = max(ans, update(sta));
    }
    cout << ans << endl;
}
1. 首先,确保已经正确安装了Node.js。可以在终端输入"node -v"命令来检查Node.js的版本号,如果能正确显示版本号,则表示Node.js已经成功安装。 2. 确认VS Code的设置中已经正确配置了Node.js的路径。打开VS Code,点击菜单栏的"文件",选择"首选项",再选择"设置"。在设置页面的搜索框中输入"node",找到"Node Executable Path"选项,并确保其值为Node.js的可执行文件的路径。如果路径不正确,可以选择"修改"并选择正确的路径。 3. 如果上述步骤都已经检查或更改过了,但仍然出现找不到Node.js二进制文件的错误提示,可能是因为环境变量配置问题。可以尝试手动设置全局环境变量来解决该问题。 4. 在mac上,可以通过编辑bash配置文件来设置全局环境变量。打开终端,输入命令"open ~/.bash_profile"来编辑bash配置文件。在文件中添加以下内容: export PATH="/usr/local/bin:$PATH" 这将把Node.js的路径添加到全局环境变量中,确保VS Code可以正确找到Node.js的二进制文件。 5. 保存并关闭bash配置文件,并重启终端。重新打开VS Code并尝试运行调试器,应该不再出现"node"路径不存在的错误提示。 如果问题仍然存在,可以尝试卸载并重新安装Node.js,或者更新VS Code和Node.js到最新版本,以确保软件的兼容性。也可以参考VS Code和Node.js的官方文档或社区论坛,寻求更详细的帮助和解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值