矩阵取数游戏

矩阵取数游戏

https://ac.nowcoder.com/acm/problem/16645

题意

一个的矩阵,每次每行取一个数,取次。

每行取数的得分 被取走的元素值

求得分的最大值。

分析

显然每行怎么取值都是相互独立的,不会影响其他行,所以我们只需要考虑如何取值才可以让一行的得分最大化。

很明显,我们最先只可以取第一个或者最后一个数,第二次取剩下的第一个或者最后一个数。

我们可以利用区间dp记忆化来做这题。

注意会爆

#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define int __int128_t
const int inf = 0x3f3f3f3f;
const int maxn = 85;
const int M = 1e9+7;
int n,m,k,ok;

int read()
{
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+c-'0',c=getchar();
    return f*x;
}

void print(int x)
{
    if(x < 0) {putchar('-');x = -x;}
    if(x/10) print(x/10);
    putchar(x%10+'0');
}

int a[maxn],b[maxn];

int dp[maxn][maxn][maxn];

int dfs(int l,int r,int cs)         //[l,r]区间取第cs个数
{   
    if(cs > m) return 0;
    if(dp[l][r][cs]) return dp[l][r][cs];
    int ans1 = b[cs]*a[l] + dfs(l+1,r,cs+1);        //取第一个数
    int ans2 = b[cs]*a[r] + dfs(l,r-1,cs+1);        //取最后一个数
    return dp[l][r][cs] = max(ans1,ans2);           //记忆化
}

signed main()
{
    n = read(),m = read();
    int ans = 0;
    b[1] = 2;
    for(int i = 2; i <= m; i++) 
    {
        b[i] = b[i-1]*2;
    }
    for(int i = 1; i <= n; i++) 
    {
        for(int j = 1; j <= m; j++) 
        {
            a[j] = read();
        }
        mem(dp,0);
        ans += dfs(1,m,1);
    }
    print(ans);
    return 0;
}
全部评论

相关推荐

已oc&nbsp;云智断更了好几天,也有一些话想说,继续更新一篇云智timeline&nbsp;4.18&nbsp;一面&nbsp;半个小时后约二面&nbsp;4.21二面&nbsp;当晚&nbsp;约hr面&nbsp;4.23hr面&nbsp;4.30&nbsp;发offer之前美团的二面挂了,进入人才库,后面又被捞起来面试,4.30号&nbsp;美团又一面,现在还没出一面结果感觉也不报什么希望,就算一面过了,还有二面,我经不起深入拷打,唉,真的,好难五一躺平了五天,吃吃玩玩睡睡~还要担心毕业,科研更是难,唉暑期可能就到此为止了,后面没有时间在这个上面了,要抓紧时间做科研,为了后面能出去实习。大厂,秋招再见!!!有一些感慨:4.1是我的第一次面试,美团,面试的时候紧张到浑身发...
daisy9542:我今晚也是美团一面,已经第六次了。我也面了其他的,没拿到 offer。但我想开了,要按照自己的节奏来,找暑期转正然后秋招大杀四方并不是唯一的出路,其实还有很多选择的,有 0 实习最后秋招拿 offer 了,也有不选择互联网去国企的外企的,考编的,创业的。现在的失败不代表以后的路都是黑暗的,只不过可能运气还没降临到头上。所以现在要做的,就是放平心态,提升自己,通过面试了解到自己的优点和不足,争取下次机会来了能好好抓住
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-29 08:32
点赞 评论 收藏
分享
03-11 21:46
西北大学 Java
河和静子:这只是实习工资,我学长北大通班博一的,他同学被这家天天发邮件让他去实习,一个月10w
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务