• 牛客小白月赛60 C 小竹关禁闭(动态规划 01背包)


    题目描述
    妈妈成功将小竹救了出来,她觉得小竹实在是太笨了,决定关小竹一周禁闭。可是小竹哪里能忍受失去自由,他早就偷藏了一部手机用于联系你,请求你帮助他逃离。

    你通过观察发现他房间内有 n n n 个可用于制成绳子的物品,第 i i i 个的长度为 a i a_i ai 。当你使用第 i i i 个物品制作绳子时,其右侧的 k k k 个物品(不含第 i i i个物品)就无法再被用于制作绳子 。最终,小竹用选择的物品制成绳子,绳子的长度是所选择物品的长度之和。

    小竹想知道,他能制作的绳子长度最长为多少?

    输入描述:
    第一行两个整数 n , k ( 1 ≤ k ≤ n ≤ 2000 ) n,k(1≤k≤n≤2000) n,k(1kn2000)
    第二行 n n n 个用空格隔开的整数,第 i i i 个整数为 ( 1 ≤ a i ​ ≤ 2000 ) (1≤a_i​ ≤2000) (1ai2000),表示第 i i i 个物品的长度。

    输出描述:
    一行一个整数,表示绳子的最长长度。

    输入

    5 2
    1 2 3 4 5
    
    • 1
    • 2

    输出

    7
    
    • 1

    说明
    使用第 2 2 2 个和第 5 5 5 个物品制成绳子


    赛时压根没看出来是一个dp问题。

    对于此问题,使用 f [ i ] f[i] f[i]来代表从前 i i i个里面选,这时候需要先分为两种情况,第一种情况是第 i i i个物品前面有 k k k个物品,也就是 i − k − 1 > = 0 i-k-1 >= 0 ik1>=0,这时候我们就可以把集合划分为选第 i i i个还是不选第 i i i个,如果选第 i i i个,就是 f [ i − k − 1 ] + a [ i ] f[i-k-1] + a[i] f[ik1]+a[i],如果不选第 i i i个,就是 f [ i − 1 ] f[i-1] f[i1],第二种情况是前 i i i个物品不够 k k k个物品,这时如果选第 i i i个,就是 a [ i ] a[i] a[i] ,如果不选第 i i i个,就是 f [ i − 1 ] f[i-1] f[i1]

    代码:

    #include
    using namespace std;
    const int N = 2010;
    int f[N];
    int a[N];
    int n,k;
    int main(){
        cin >> n >> k;
        for(int i = 1;i <= n;i++)cin >> a[i];
        
        int res = 0;
        for(int i = 1;i <= n;i++){
            if(i-k-1 >= 0)f[i] = max(f[i-1],f[i-k-1]+a[i]);
            else f[i] = max(a[i],f[i-1]);
            res = max(f[i],res);
        }
        cout << res;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    WebRTC简介
    NLP手札1. 金融信息负面及主体判定方案梳理&代码实现
    竞赛选题 深度学习 大数据 股票预测系统 - python lstm
    【编程题】【Scratch四级】2020.12 解密
    有序Map集合:LinkedHashMap和TreeMap该如何选用
    【验证码逆向专栏】最新某验三代滑块逆向分析,干掉所有的 w 参数!
    Tomcat深入浅出——最终章(六)
    SQLite利用事务实现批量插入(提升效率)
    (三)admin-boot项目之整合alibaba-druid连接池
    安装Linux虚拟机并在Llinux中安装Redis、MySQL
  • 原文地址:https://blog.csdn.net/2302_79440616/article/details/136463548