NC24949. [USACO 2008 Jan S]Running
描述
输入描述
* Line 1: Two space-separated integers: N and M
* Lines 2..N+1: Line i+1 contains the single integer: Di
输出描述
* Line 1: A single integer representing the largest distance Bessie can run while satisfying the conditions.
示例1
输入:
5 2 5 3 4 2 10
输出:
9
说明:
Bessie runs during the first minute (distance=5), rests during the second minute, runs for the third (distance=4), and rests for the fourth and fifth. Note that Bessie cannot run on the fifth minute because she would not end with a rest factor of 0.C++14(g++5.4) 解法, 执行用时: 41ms, 内存消耗: 20068K, 提交时间: 2019-07-28 16:43:33
#include <bits/stdc++.h> using namespace std; int dp[10005][505]; int main() { int n, m, num; scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { scanf("%d", &num); dp[i][0] = dp[i-1][0]; for (int j = 1; j <= m; j++) { if (i > j) dp[i][0] = max(dp[i][0], dp[i-j][j]); dp[i][j] = dp[i-1][j-1] + num; } } printf("%d\n", dp[n][0]); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 15ms, 内存消耗: 624K, 提交时间: 2020-03-29 16:33:13
#include<bits/stdc++.h> using namespace std; int f[10001],n,m,s,sum[10001],i,k; int main() { cin>>n>>m; for(i=1;i<=n;i++) { cin>>s; sum[i]=sum[i-1]+s; f[i]=f[i-1]; for(k=1;k<=m&&i-k*2>=0;k++) f[i]=max(f[i],f[i-k*2]+sum[i-k]-sum[i-k*2]); } cout<<f[n]<<endl; }