您的位置:首页 > 其它

2011百度之星 复赛(下)第一题

2011-06-19 22:44 232 查看
// BDFS2_1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
#define MAX 1000005
#define min(x,y) ((x)<(y)?(x):(y))
#define INF 99999999
int h[MAX];
int n;
//bool couldJump[MAX][MAX];
int dp[MAX];//d第0点往j点跳
bool couldJump(int x,int y){

if(y<=x)return false;
for(int i=x+1;i<y;i++){
if(h[i]>=h[x]&&h[i]>=h[y])return false;
}

if(y-x>h[x])return false;

return true;
}
int main(int argc, char* argv[])
{
freopen("i://input.txt","r",stdin);
int i,j;

scanf("%d",&n);
for(i=0;i<n+1;i++)
scanf("%d",h+i);

dp[0]=0;
for(j=1;j<=n;j++){

dp[j]=INF;
}
for(i=1;i<=n;i++){

for(int j=i-1;j>=0;j--){

if(couldJump(j,i)){

int ti = 0;
if(h[j]<=h[i])ti=h[i]-h[j];

if(dp[j]+ti<dp[i])
dp[i]=dp[j]+ti;

}

}

}
printf("%d\n",dp
);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: