zoukankan      html  css  js  c++  java
  • 【动态规划】抢金块

    问题 E: 【动态规划】抢金块

    时间限制: 1 Sec  内存限制: 64 MB
    提交: 40  解决: 14
    [提交] [状态] [讨论版] [命题人:]

    题目描述

    地面上有一些格子,每个格子上面都有金块,但不同格子上的金块有不同的价值,你一次可以跳S至T步(2≤S<T≤10)。例如S=2,T=4,你就可以跳2步、3步或4步。你从第一个格子起跳,必须跳到最后一个格子上,请你输出最多可以获得的金块的总价值。


    输入

    第1行是格子个数n (n<1000);
    第2行是S和T,保证T大于s(2≤S<T≤10);
    第3行是每个格子上的金块价值Pi (Pi<10000)。


    输出

    输出最多可以获得的金块的总价值。


    样例输入

    10
    2 3
    4 5 8 2 8 3 6 7 2 9
    

    样例输出

    36
    

    提示

    样例说明:跳l、3、5、8、10,总价值:4+8+8+7+9=36。

    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <deque>
    #include <map>
    #define range(i,a,b) for(int i=a;i<=b;++i)
    #define LL long long
    #define rerange(i,a,b) for(int i=a;i>=b;--i)
    #define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
    using namespace std;
    int n,s,t,val[1005],dp[1005];
    void init(){
        cin>>n>>s>>t;
        range(i,1,n)cin>>val[i];
        dp[1]=val[1];
    }
    void solve(){
        range(i,2,n)
        range(j,s,t)if(i-j>0)dp[i]=max(dp[i],dp[i-j]+val[i]);
        cout<<dp[n]<<endl;
    }
    int main() {
        init();
        solve();
        return 0;
    }
    View Code

  • 相关阅读:
    Linux新手随手笔记2.4-使用DHCP动态管理主机地址
    在word中输入任意角度旋转图片
    VBA注释临时
    VBA改写VBA代码
    【转载】robocopy的用法
    Excel数组排序+图片统一大小
    一键调节音量
    合并文档时让第一页为奇数
    智能跳转---TC资源管理器
    win7一键拖动生成快速启动栏
  • 原文地址:https://www.cnblogs.com/Rhythm-/p/9350591.html
Copyright © 2011-2022 走看看