zoukankan      html  css  js  c++  java
  • poj 3661 Running

    题意:给你一个n,m,n表示有n分钟,每i分钟对应的是第i分钟能跑的距离,m代表最大疲劳度,每跑一分钟疲劳度+1,当疲劳度==m,必须休息,在任意时刻都可以选择休息,如果选择休息,那么必须休息到疲劳度为0,当然,当疲劳度为0的时候也是可以继续选择休息的,求在n分钟后疲劳度为0所跑的最大距离

    思路:dp[i][j]表示在第i分钟疲劳度为j的时候所跑的最大距离,dp[i][j]=dp[i-1][j-1]+d[i];这个转移,说的是,第i分钟选择跑步,当然,第i分钟可以选择不跑步,那么就是选择休息,题目说了,选择休息的话必须要休息到疲劳度为0才可以跑,那还有一点,当疲劳度为0了,还是选择继续休息呢?dp[i][0]=dp[i-1][0];
    选择休息,那么疲劳度到0了,这一点的最大距离怎么做呢?dp[i][0]=max(dp[i][0],dp[i-k][k])   (0<k<=m&&i-k>0)

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<set>
     9 #include<queue> 
    10 #include<algorithm>  
    11 using namespace std;
    12 
    13 int dp[10005][1005];
    14 int ans[10005];
    15 
    16 int main()
    17 {
    18     int n,m;
    19     while(cin>>n>>m)
    20     {
    21         for(int i=1;i<=n;i++)
    22             scanf("%d",&ans[i]);
    23         memset(dp,0,sizeof(dp));
    24         
    25         for(int i=1;i<=n;i++)
    26         {
    27             for(int j=1;j<=m;j++)    
    28                 dp[i][j]=dp[i-1][j-1]+ans[i];
    29             dp[i][0]=dp[i-1][0];
    30             for(int k=1;k<=m;k++)
    31                 if(i-k>=0)
    32                     dp[i][0]=max(dp[i][0],dp[i-k][k]);
    33         }
    34         cout<<dp[n][0]<<endl;
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    SQL盲注 加速方法
    后渗透(七)关闭防火墙和杀毒软件并开启远程桌面
    后渗透(五)PassingTheHash
    瀏覽器兼容性解決方法
    web頁面優化以及SEO
    DOM中的事件傳播機制
    Get與Post的區別--總結隨筆
    微信飞机大战
    python教程(三)·自定义函数
    python教程(三)·函数与模块
  • 原文地址:https://www.cnblogs.com/pter/p/5513403.html
Copyright © 2011-2022 走看看