雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

简单dp——[Usaco2008 Mar]River Crossing渡河问题

Posted on 2011-03-23 22:23  huhuuu  阅读(361)  评论(0编辑  收藏  举报

dp[i]=min(dp[i],dp[j]+dp[i-j]+m)//dp [i]里放着i只牛渡河最少时间

View Code
#include<stdio.h>

int dp[2509];
int a[2509];
int min(int a,int b)
{
return a>b?b:a;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int i,add=0;
for(i=1;i<=n;i++)
{
int temp;
scanf(
"%d",&temp);
add
+=temp;
a[i]
=add+m;
dp[i]
=a[i];
}
int j;
for(i=2;i<=n;i++)
{
for(j=1;j<i;j++)
{
dp[i]
=min(dp[i],dp[i-j]+dp[j]+m);
}
}

printf(
"%d\n",dp[n]);
}
}