奶牛的锻炼
2010-06-17 22:44
239 查看
题目描述:
奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步。在第N分钟后,她的疲倦程度必须为0。
具体题目及评测:http://www.tyvj.cn/ 题目代号为 P1023
今天晚上没自修,想干点什么,时间不多,这种情况写动态规划似乎很合适。于是乎我就写了。
F[i][j]表示i分钟,j的疲劳程度所跑的最长距离。
因为奶牛一停下休息,就需要休息到体力恢复为0为止。所以F[i][0]和其他F[i][j]是不一样的
F[i][j] = F[i-1][j-1] + R[i] //就是一个递推的过程 因为不可能停下来休息
F[i][0]则可能是F[k][0](奶牛就是恢复了体力也不跑步)和F[i-k][k](刚恢复)
所以
F[i][0] = max{ F[i-k][k] , F[k][0] }
j <= i
0 <= k < j
F[0][j] = 0
代码:
奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步。在第N分钟后,她的疲倦程度必须为0。
具体题目及评测:http://www.tyvj.cn/ 题目代号为 P1023
今天晚上没自修,想干点什么,时间不多,这种情况写动态规划似乎很合适。于是乎我就写了。
F[i][j]表示i分钟,j的疲劳程度所跑的最长距离。
因为奶牛一停下休息,就需要休息到体力恢复为0为止。所以F[i][0]和其他F[i][j]是不一样的
F[i][j] = F[i-1][j-1] + R[i] //就是一个递推的过程 因为不可能停下来休息
F[i][0]则可能是F[k][0](奶牛就是恢复了体力也不跑步)和F[i-k][k](刚恢复)
所以
F[i][0] = max{ F[i-k][k] , F[k][0] }
j <= i
0 <= k < j
F[0][j] = 0
代码:
#include <iostream> using namespace std; int _gDp[2001][501]; int main() { int n,m; int run[2001]; cin >> n >> m; for( int i = 1;i <= n;++i ) cin >> run[i]; //!!!!!!初始化_gDp[0][i]=0 因为是全局函数 就不在做了 for( int time = 1;time <= n;++time ) { //_gDp[i][0] int max = 0; for( int k = 0;k < time;++k ) { if( _gDp[k][0] > max ) max = _gDp[k][0]; if( _gDp[time-k][k] > max ) max = _gDp[time-k][k]; } _gDp[time][0] = max; for( int tired = 1;tired <= m;++tired ) _gDp[time][tired] = _gDp[time-1][tired-1] + run[time]; } /*for( int i = 0;i <= m;++i ) { for( int j = 0;j <= n;++j ) cout << _gDp[j][i] << ' '; cout << endl; }*/ cout << _gDp [0] << endl; //system("pause"); return 0; }
相关文章推荐
- Tyvj 1023 奶牛的锻炼 dp
- TYVJ 1023 奶牛的锻炼(DP)
- DP练习 - 奶牛的锻炼
- 奶牛的锻炼...dp
- Tyvj 题目1023 奶牛的锻炼(DP)
- QUSTOJ1782 A奶牛的锻炼(线性动归)
- 奶牛的锻炼
- 奶牛锻炼
- USACO //P1023 奶牛的锻炼
- TYVJ 1023 奶牛的锻炼
- 奶牛的锻炼-线性dp
- |Tyvj|动态规划|1023 奶牛的锻炼
- C语言奶牛的锻炼
- TYVJ P1023奶牛的锻炼(动态规划)
- HUT-1685 奶牛的锻炼 DP
- tyvj p1023(奶牛的锻炼)(100)
- Codevs 2161 奶牛的锻炼
- USACO 奶牛的锻炼
- 奶牛的锻炼
- 奶牛的锻炼 DP