NC12986K

Matrix

https://ac.nowcoder.com/acm/contest/12986/K

Solution

遇到比较困难的题目可以先从比较暴力的方法开始入手在结合题目的一些性质、数据范围开始进行优化。
思考一下能够想到比较暴力的dp:

: 表示第 行选了 列,一共选了 个数的最大值。


按上述式子写复杂度是 毫无疑问会TLE、MLE,接着开始优化,我们降一维则可以通过本题。


仔细观察发现我们可以把 提到 max 函数外面。
时间:我们可以通过后缀最大值来优化这个式子,每次对当前行求完的同时进行后缀最大值。
空间:滚动数组


时间复杂度:

坑点:一定要清空 , 因为不清空的话 是上上一行的后缀最大值,他的列是对不上的。

Code

#include <bits/stdc++.h>

#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ls (p << 1)
#define rs (ls | 1)
#define tm ((tl + tr) >> 1)
#define lowbit(x) ((x) & -(x))

using namespace std;
using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;

constexpr double eps = 1e-8;
constexpr int NINF = 0xc0c0c0c0;
constexpr int INF = 0x3f3f3f3f;
constexpr ll LNINF = 0xc0c0c0c0c0c0c0c0;
constexpr ll LINF = 0x3f3f3f3f3f3f3f3f;
constexpr ll mod = 1e9 + 7;
constexpr ll N = 300 + 5;

int n, m, c;
ll f[2][N][1005], pre[N][N];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> m >> c;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            int x;
            cin >> x;
            pre[i][j] = pre[i][j - 1] + x;
        }
    }
    ll ans = 0;
    for (int i = 1; i <= n; i++) {
        int cur = i & 1;
        memset(f[cur], 0, sizeof(f[cur]));
        for (int j = m; j >= 1; j--) {
            for (int k = i * j; k <= c; k++) {
                f[cur][j][k] = max({f[cur][j][k], f[cur ^ 1][j][k - j] + pre[i][j], f[cur][j + 1][k]});
            }
            ans = max(ans, f[cur][1][c]);
        }
    }
    cout << ans << '\n';

    return 0;
}
11eyes的每日一题 文章被收录于专栏

牛客每日一题

全部评论

相关推荐

12-23 18:51
中南大学 Java
唉又萌混过关:是不是那种收钱盖实习章的机构?
点赞 评论 收藏
分享
面试官全程关摄像头1.自我介绍一下2.React和Vue哪个更熟悉一点3.你在之前那段实习经历中有没有什么技术性的突破(我只是实习了44天工作28天,我把我能说的都说了)4.你封装的哪个表单组件支不支持动态传值5.自己在实习阶段Vue3项目封装过hook吗6.hook有什么作用7.Vue2和Vue3的响应式区别(我说一个是proxy是拦截所有的底层操作,Object.defineProperty本身就是一个底层操作,有些东西拦截不了,比如数组的一些操作还有等等,面试官就说实在要拦截能不能拦截????我心想肯定不行呀,他的底层机制就不允许吧)8.pinia和vuex的区别(这个回答不出来是我太久没用了)9.pinia和zustand的区别,怎么选(直接给我干懵了)(我说react能用pinia吗&nbsp;&nbsp;他说要用的话也可以)10.渲染一万条数据,怎么解决页面卡顿问题(我说分页、监听滚轮动态加载,纯数据展示好像还可以用canvas画)(估计是没说虚拟表单,感觉不满意)11.type和interface的区别12.ts的泛型有哪些作用(我就说了一个结构相同但是类型不同的时候可以用,比如请求响应的接口,每次的data不同,这里能用一个泛型,他问我还有什么)13.你项目用的是React,如果让你再写一遍你会选择什么14.pnpm、npm、yarn的区别15.dependencies和devdependencies的区别总而言之太久没面试了,上一段实习的面试js问了很多。结果这次js一点没问,网络方面也没考,表现得很一般,但是知道自己的问题了&nbsp;&nbsp;好好准备,等待明天的影石360和周四的腾讯了&nbsp;&nbsp;加油!!!
解zj:大三的第一段面试居然是这样的结局
查看15道真题和解析
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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