zoukankan      html  css  js  c++  java
  • 奶牛的锻炼

    背景 Background  
      USACO
         
         
      描述 Description  
      奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步。在第N分钟后,她的疲倦程度必须为0。
         
         
      输入格式 Input Format  
      第一行,两个整数,代表N和M。
    接下来N行,每行一个整数,代表D_i。
         
         
      输出格式 Output Format  
      Bessie想知道,她最多能跑的距离。
     
    样例输入 Sample Input [复制数据]  
     
         
         
      样例输出 Sample Output [复制数据]  
     
    View Code
     1 #include<iostream>
     2 #include<string.h>
     3 #include<algorithm>
     4 #include<cstdio>
     5 #include<cstdlib>
     6 #include<cstring>
     7 
     8 
     9 using namespace std;
    10 
    11 int n,m;
    12 int a[2001];
    13 int f[2001][501];
    14 
    15 
    16 int main( )
    17 {
    18     cin>>n>>m;
    19     for(int i=1;i<=n;i++)
    20     {
    21        scanf("%d",&a[i]);
    22     }
    23     memset(f,0,sizeof(f));
    24     for(int i=1;i<=n;i++)
    25     {
    26         for(int j=0;j<=m;j++)
    27         {
    28              if(j!=0)    
    29              f[i][j]=f[i-1][j-1]+a[i];
    30              else  
    31              {
    32                  f[i][0]=max(f[i][0],f[i-1][0]);
    33                  for(int k=i;k>=1;k--)
    34                  {
    35                     f[i][0]=max(f[i][0],f[i-k][k]);
    36                  }
    37              }
    38         }
    39     }
    40     int maxn=0;
    41     cout<<f[n][0];
    42     system  ("pause");
    43     return 0;
    44 }
    45     
    46       

    首先这道题有个坑爹的地方,那就是休息必须休息到0才能再开始。对于这个,可以采取一种类似区间动态规划的思想,FOR一遍以前的f[i-k][k],最后还要注意,f[i][0]可由f[i-1][0]递推而来。。。这道题要A掉不简单。。。

  • 相关阅读:
    完数
    自定义的allocator
    成绩的处理
    R语言-线性回归(1)
    R语言-朴素贝叶斯分类器(1)
    R语言控制流
    leetcode Two sum
    数据库环境搭建
    表单验证制作注册页面
    表单验证
  • 原文地址:https://www.cnblogs.com/spwkx/p/2586892.html
Copyright © 2011-2022 走看看