官方题解 | #字母收集#

字母收集

http://www.nowcoder.com/practice/9740ce2df0a04399a5ade1927d34c1e1

字母收集

难度:2星

经典的二维dp题目。设从起点到当前点的最大收益为 dp[i][j]dp[i][j],那么显然当前点 (i,j)(i,j) 要么从 (i1,j)(i-1,j) 过来,要么从 (i,j1)(i,j-1) 过来。因此有dp方程:

dp[i][j]=max(dp[i1][j],dp[i][j1])+val[i][j]dp[i][j]=max(dp[i-1][j],dp[i][j-1])+val[i][j]

其中 val[i][j]val[i][j] 代表当前字母的权值。

#include<bits/stdc++.h>
using namespace std;
int dp[555][555];
string a[555];
int f(char c){
    if(c=='l')return 4;
    if(c=='o')return 3;
    if(c=='v')return 2;
    if(c=='e')return 1;
    return 0;
}
int main(){
    int n,m,i,j;
    cin>>n>>m;
    for(i=0;i<=n;i++)cin>>a[i];
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            int temp=0;
            if(i>0)temp=max(temp,dp[i-1][j]);
            if(j>0)temp=max(temp,dp[i][j-1]);
            dp[i][j]=temp+f(a[i][j]);
        }
    }
    cout<<dp[n-1][m-1];
}
全部评论
谢谢你的代码~不过兄dei 你for(i=0;i<=n;i++)cin>>a[i];这行应该把<=换成< 这样子更好些叭俺感觉
点赞 回复 分享
发布于 2022-12-24 21:45 北京

相关推荐

好久没来牛客了,今天面试了一个实习生,感觉对方形象乱糟糟的,头发像鸡窝,像刚睡醒就来面试了,第一印象直接大打折扣,感觉我没有受到应有的尊重,再加上对方业务能力也一般,我直接挂掉;大家面试的时候还是好好收拾一下自己吧,争取给面试官留下个好印象,面试这东西还是存在眼缘的
MinJerous:更在乎本质,应该看候选人是否和岗位需要的能力匹配。洗脸/不洗头都无所谓吧,说不定人家刚刚通宵准备,就是为了这场面试呢?你挂掉他核心原因还是他能力不行,而不是形象。就算形象好点,能力不行你敢给过吗,不怕后面+1质疑你
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务