日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Running(POJ-3661)

發布時間:2025/3/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Running(POJ-3661) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Problem Description

The cows are trying to become better athletes, so Bessie is running on a track for exactly N (1 ≤ N ≤ 10,000) minutes. During each minute, she can choose to either run or rest for the whole minute.
The ultimate distance Bessie runs, though, depends on her 'exhaustion factor', which starts at 0. When she chooses to run in minute i, she will run exactly a distance of Di (1 ≤ Di ≤ 1,000) and her exhaustion factor will increase by 1 -- but must never be allowed to exceed M (1 ≤ M ≤ 500). If she chooses to rest, her exhaustion factor will decrease by 1 for each minute she rests. She cannot commence running again until her exhaustion factor reaches 0. At that point, she can choose to run or rest.
At the end of the N minute workout, Bessie's exaustion factor must be exactly 0, or she will not have enough energy left for the rest of the day.
Find the maximal distance Bessie can run.

Input

Line 1: Two space-separated integers: N and M

Lines 2..N+1: Line i+1 contains the single integer: Di

Output

Line 1: A single integer representing the largest distance Bessie can run while satisfying the conditions.

Sample Input

5 2

5
3
4
2
10

Sample Output

9

題意:在賽道跑n分鐘,每分鐘可以選擇跑或者休息,以分鐘i跑時會跑完Di的距離但疲勞因子會+1,如果休息,每分鐘疲勞因子會-1,但要減到0才能再次跑。疲勞因子不會超過m,在n分鐘結束后,疲勞因子必須為0,求最大距離。

思路

是一個區間dp題,用f[i][j]表示第i分鐘疲勞值為j時的最大值,由于每分鐘有休息或者跑兩種狀態,此時就要用分治的思想,來分別考慮跑和休息時的狀態轉移方程。

當選擇跑時,當前分鐘的最大值由上一分鐘的最大值決定,故有:f[i][j]=f[i-1][j-1]+D[i]

當選擇休息時有:當前狀態的最大值由前面決定開始休息的時間點i-j決定,故有:f[i][0]=max{ d[i-j][j] },j<=m

Source Program

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 10001 #define MOD 2520 #define E 1e-12 using namespace std; int f[N][501],d[N]; int main() {int n,m;while(scanf("%d%d",&n,&m)!=EOF){memset(f,0,sizeof(f));for(int i=1;i<=n;i++)scanf("%d",&d[i]);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)//跑f[i][j]=f[i-1][j-1]+d[i];f[i][0]=f[i-1][0];for(int j=1;j<=i&&j<=m;j++)//休息f[i][0]=max(f[i][0],f[i-j][j]);}printf("%d\n",f[n][0]);}return 0; }

?

總結

以上是生活随笔為你收集整理的Running(POJ-3661)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。