奶牛的锻炼...dp


动归的主要思想还是通过解决子问题一步一步解决最终的问题,就像是大BOSS问他的助理一个问题,然后助理又问下一层,然后一层一层的往下,但其实最底层的人很笨,说的很啰嗦,且不完善,所以就需要每上一层的完善,直到得到最好的答案告诉大BOSS。

通过这道题,发现动归关键要找到存储每层最佳答案的标准,即容器,还有就是递推公式,比如这道题的递推公式我就没推明白,最后只能半知半解的抄袭了这道题的题解,例如我就不是很明白为什么只要休息就休息到疲惫值为零就是最佳状态,这种idea简直突破我的脑洞。。。。

 

#include <cstring>

#include <cstdio>

#include <cstdlib>

#include <iostream>

#include <algorithm>

#define M 10005

 

using namespace std;

 

int s[M];

int f[M][505] = {0};

 

int main()

{

    int n,m;

    int i, j, k, b;

 

   scanf("%d%d", &n, &m);

 

    for(i = 1; i<= n; i++)

    {

       scanf("%d", &s[i]);

    }

 

    f[1][1] = s[1];

    int ma = 0;

 

    for(i = 2; i<= n; i++)

    {

       for(j = 0; j<= m; j++)

       {

           if(j ==0)

           {

              for(k = 1; k<=i>>1; k++)

               {

                  ma = max(ma,f[i-k][k]);

               }

               ma =max(ma, f[i-1][j]);

              f[i][j] = ma;

               ma =0;

           }

           else

            f[i][j]= f[i-1][j-1]+s[i];

       }

    }

 

   printf("%d", f[n][0]);

 

    return 0;

}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值