poj 3661 Running

來源:互聯網
上載者:User

標籤:

題意:給你一個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 }

 

poj 3661 Running

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.