51nod 1625 夹克爷发红包
题意是有一个赋有非负数的矩阵,每次可以将某一行or某一列替换成某个数值,可以替换<=k次,问如何替换能使得矩阵总和最大,输出最大值。
一开始想的是简单的贪心:比如找当前收益最大的行或者列来替换。这样的问题在于:替换行必然影响列,同理列影响行,就是说当前的贪心会影响之后的决策,不可行。
因为行最多10行,所以用dfs枚举行替换与否,然后再贪心地找收益最大的列来替换。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
const ll maxN=2e2+5;
ll G[maxN][maxN], T[maxN][maxN], C[maxN];
bool used[maxN];
ll n, m, x, k, ans;
void calc() {
ll us = 0;
memcpy(T, G, sizeof G);
FOR(i, 1, n) if (used[i]) {
++us;
FOR(j, 1, m) T[i][j] = x;
}
ll sy = k - us;
memset(C, 0, sizeof C);
FOR(j, 1, m) FOR(i, 1, n) C[j] += T[i][j];
ll aft = n * x;
FOR(s, 1, sy) {
ll idx = min_element(C + 1, C + 1 + m) - C;
if (C[idx] >= aft) break;
C[idx] = aft;
FOR(i, 1, n) T[i][idx] = x;
}
ll t = 0;
FOR(i, 1, n) FOR(j, 1, m) t += T[i][j];
ans = max(ans, t);
}
void dfs(ll r, ll tk) {
if (tk > k) return;
if (r > n) calc();
else {
used[r] = 1;
dfs(r + 1, tk + 1);
used[r] = 0;
dfs(r + 1, tk);
}
}
int main () {
cin >> n >> m >> x >> k;
memset(used, 0, sizeof used);
FOR(i, 1, n)
FOR(j, 1, m) cin >> G[i][j];
ans = 0;
dfs(1, 0);
cout << ans << '\n';
return 0;
}
51nod 1625 夹克爷发红包的更多相关文章
- 51nod 1625 贪心/思维
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1625 1625 夹克爷发红包 基准时间限制:1 秒 空间限制:13107 ...
- PHP实现发红包程序
我们先来分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第 ...
- PHP实现发红包程序(helloweba网站经典小案例)
我们先来分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第 ...
- 使用PHP编写发红包程序
使用PHP编写发红包程序 http://www.jb51.net/article/69815.htm 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-07-22 微信发红 ...
- js 发红包
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- 发红包android
立即春节,写个应景的控件 思路分析 1.红包沿着不同的轨迹由上往下运动 2.当手指捕获到一个红包,红包停止原先的运动,能够随着手指的滑动做跟手操作 3.当手指动作停止后,红包放大 4. ...
- 微信小程序红包开发 小程序发红包 开发过程中遇到的坑 微信小程序红包接口的
最近公司在开发一个小程序红包系统,客户抢到红包需要提现.也就是通过小程序来给用户发红包. 小程序如何来发红包呢?于是我想到两个方法. 之前公众号开发一直用了的.一个是红包接口,一个是企业支付接口.一开 ...
- 微信小程序发红包
背景: 近期一个朋友公司要做活动,活动放在小程序上.小程序开发倒是不难,不过要使用小程序给微信用户发红包,这个就有点麻烦 确定模式: 小程序目前没有发红包接口,要实现的话,只能是模拟红包,即小程序上做 ...
- JAVA发红包案例
模拟拼手气红包* 对于指定总金额以及红包个数,可以生成不同金额的红包,*,每个红包金额随机生成. * 分析这个题目:* 1.首先需要一个分发红包的方法.输入的参数是 总金额 以及 红包个数.* 按照这 ...
随机推荐
- U3D Invoke系列函数
public void Invoke(string methodName, float time) 多少秒后执行某个函数 参数说明: methodName:要执行的函数的名称 time:秒数,time ...
- CodeForces -977F(突破定式思维+map应用)
题目链接: https://cn.vjudge.net/problem/CodeForces-977F /* 问题 输入n和n个数的数列 计算并输出最长增量为1的上升子序列 解题思路 用n2的最长上升 ...
- React多页面应用脚手架-v1.3.0
react-multi-page-app是一个基于react和webpack的多页面应用架构,通过编译生成对应目录结构清晰的静态页面,实现多页面便捷开发维护.1.3.0 版本对项目整体做了一个全面的升 ...
- [转]oracle in 多个字段
本文转自:https://www.cnblogs.com/Springmoon-venn/p/7016409.html oracle 使用in的时候使用多个字段 这个也是刚需啊. 最近有个需求,在一堆 ...
- 读取XML某一节点
先看XML文档: <?xml version="1.0" encoding="utf-8" ?> <NewDataSet> <Ta ...
- Git-分支创建、拉取、切换
git新建本地分支命令 1.创建本地分支 git branch 分支名,例如:git branch 2.0.1.20120806 注:2.0.1.20120806是分支名称,可以随便定义. 2.创建远 ...
- 学习c++的五十条忠告
1.把C++当成一门新的语言学习: 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<The C++ Programming Language ...
- 关于eclipse的项目前有感叹号和errors exist in required project相关问题
一般来说 项目运行中 各个类的信息中并没有报错 但在运行中会出现errors exist in required project 且有时候运行也会成功.这种情况是由于项目中其他的类存在问题未解决 导 ...
- 使用git将本地仓库同步到github远程仓库
一.下载安装git客户端windows版本 二.建立本地仓库文件夹 三.在本地仓库里右键点击Git Bash Here 四.初始化本地仓库 [git init] 执行之后仓库中会创建隐藏的文件夹.gi ...
- NIO,AIO,BIO
同步和异步:同步和异步关注的是消息通信机制, 同步:就是在发出一个“调用”时,在没有得到结果之前,该“调用”就不返回,但是一旦调用返回,就得到返回值了;换句话说:就是由“调用者”主动等待“调用”结果 ...