http://acm.hdu.edu.cn/showproblem.php?pid=2182
//1281694 2009-04-17 22:05:25 Accepted 2182 0MS 304K 718 B C++ no way #include<iostream> #include<map> using namespace std; int main() { int t; cin>>t; while(t--) { int n,a,b,k; int dp[101][101],num[101]; int i,j,p,M,maxs; scanf("%d%d%d%d",&n,&a,&b,&k); for(i=1;i<=n;i++) scanf("%d",&num[i]);
for(i=1;i<=n;i++) //跳0步肯定是0 dp[i][0] = 0;
M = dp[1][0] = num[1];//第1个位置的0步状态是有虫的
for(j=1;j<=k;j++)//跳跃的步数 { for(i=2;i<=n;i++)//青蛙所在的位置 { maxs = -1; for(p=1;p<i;p++) //跟其前面的位置有关 { if(p+a<= i && p+b >=i && maxs < dp[p][j-1]) maxs = dp[p][j-1]; } if(maxs == -1)//第j次跳不能跳到j这个位置 dp[i][j] = 0; else dp[i][j] = maxs + num[i]; if(M < dp[i][j]) M = dp[i][j]; } } cout<<M<<endl; } return 0; }
|