我是靠谱客的博主 矮小巨人,最近开发中收集的这篇文章主要介绍D - Snuke Panic (1D)(DP)[ AtCoder Beginner Contest 266]题目如下:思路 or 题解:AC代码如下:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目如下:

在这里插入图片描述
题目链接

思路 or 题解:

D P [ i ] [ j ] DP[i][j] DP[i][j]
i i i 位置, j j j 时刻

转移:
d p [ i ] [ j ] = m a x ( { d p [ i − 1 ] [ j − 1 ] , d p [ i + 1 ] [ j − 1 ] , d p [ i ] [ j − 1 ] } ) + 此 时 此 位 置 下 可 以 创 造 的 价 值 dp[i][j] = max({dp[i - 1][j - 1], dp[i + 1][j - 1], dp[i][j - 1]}) + 此时此位置下可以创造的价值 dp[i][j]=max({dp[i1][j1],dp[i+1][j1],dp[i][j1]})+
注意:要注意 0 0 0位置 与 4 4 4位置的转移
我选择位置+1处理,这样就不需要特判了

AC代码如下:

const int N = 100009;
int n;
int s[10][N];
int dp[10][N];
void solve()
{
    cin >> n;
    int T = 0;
    for (int i = 1; i <= n; i++)
    {
        int t, idx, val;
        cin >> t >> idx >> val;
        if (t >= idx)
            s[idx + 1][t] = val;
        T = max(T, t);
    }
    for (int j = 1; j <= T; j++)
    for (int i = 1; i <= 5; i++)
    dp[i][j] = max({dp[i - 1][j - 1], dp[i + 1][j - 1], dp[i][j - 1]}) + s[i][j];

    int ans = max({dp[1][T], dp[2][T], dp[3][T], dp[4][T], dp[5][T]});

    cout << ans << 'n';
}
signed main()
{
    buff;
    solve();
}

最后

以上就是矮小巨人为你收集整理的D - Snuke Panic (1D)(DP)[ AtCoder Beginner Contest 266]题目如下:思路 or 题解:AC代码如下:的全部内容,希望文章能够帮你解决D - Snuke Panic (1D)(DP)[ AtCoder Beginner Contest 266]题目如下:思路 or 题解:AC代码如下:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部