• codeforces 505C Mr. Kitayuta, the Treasure Hunter(dp)


    题意:有30001个岛,在一条线上,从左到右编号一次为0到30000。某些岛屿上有些宝石。初始的时候有个人在岛屿0,他将跳到岛屿d,他跳跃的距离为d。如果当前他跳跃的距离为L,他下一次跳跃的距离只能为L-1,L,L+1之一且不能为0。他只能往编号更大的岛跳,直到他不能跳,问他最多能收集多少个宝石?

    思路:用dp[i][j]表示在第i个岛,上一步跳的距离为j的收集到的最多宝石的个数。这样如果直接表示的话,j最大可能是30000,空间会超,但是所跳跃的距离不会超过d+250, 因为额1+2+3+...+250>30000, 所以如果用偏移量来表示的话,就可以了,dp[i][j]表示在第i个岛,上一步的跳跃的距离为j-250+d,其中d-250算是一个偏移量,因为如果直接用d表示的话,那么如果d减少1,就会出现负数,加上250的偏移就不会是负数了。

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int maxn = 30003;
    int num[maxn];
    int dp[maxn][552];
    int main()
    {
        int n, d, p;
        scanf("%d%d", &n, &d);
        int Max = 0;
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &p);
            num[p]++;
            Max = max(Max, p);
        }
        memset(dp, -1, sizeof(dp));
        dp[d][250] = num[d];
        int ans = 0;
        for (int i = d; i <= Max; i++)
        {
            for (int j = 0; j <= 500; j++)
            {
                if (dp[i][j] != -1)//判断第i个岛是否可达,如果可达,才可以进行往后转移(也就是往后跳)
                {
                    ans = max(ans, dp[i][j]);
                    int step = j - 250 + d;
                    if (i + step <= Max)//这里不用判断step>0,因为能进来,肯定是满足的step>0的。
                        dp[i + step][j] = max(dp[i + step][j], dp[i][j] + num[i + step]);
                    if (step - 1 > 0 && i + step - 1 <= Max)
                        dp[i + step - 1][j - 1] = max(dp[i + step - 1][j - 1], dp[i][j] + num[i + step - 1]);
                    if (i + step + 1 <= Max)
                        dp[i + step + 1][j + 1] = max(dp[i + step + 1][j + 1], dp[i][j] + num[i + step + 1]);
                }
            }
        }
        printf("%d
    ", ans);
        return 0;
    }
  • 相关阅读:
    async&await的前世今生
    如何使用cocos2dx-jsbinding 来处理分辨率适配
    cocos2d-x jsbinding 资源下载实现
    cocos2d-x jsbinding 在线更新策略设计
    xml2js
    快速入门cocos2d-x jsbinding
    cocos2d-x 工程目录结构说明
    Javascript 开发IDE
    认识cocos2d-x jsbinding
    MySQL 灵异事件一则 -- desc报语法错误
  • 原文地址:https://www.cnblogs.com/Howe-Young/p/5505441.html
Copyright © 2020-2023  润新知