程序代码:
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
#define min(x,y) (x)>(y)?(y):(x)
#define maxn 300
#define inf INT_MAX
int dp[14][maxn];
int main()
{
int n,h,s,f,max,min,q,tmp;
int a[14],k,i,j,mmax;
while(scanf("%d",&n),n)
{
//max=-;
min=inf;
mmax=inf;
for(i=0;i<13;i++)
for(j=0;j<300;j++)
dp[i][j]=inf;
scanf("%d%d%d",&h,&s,&f);
for(i=0;i<n;i++)
{scanf("%d",&a[i]);}
max=a[0];
dp[0][max]=a[0]*h+a[0]*s;
min=max;
//printf("--%d\n",dp[0][max]);
for(i=1;i<n;i++)
{
for(int p=max;p>=min;p--)
{
if(p>=a[i])
{
for(q=p;q>=a[i];q--)
{
dp[i][q]=min(dp[i][q],(dp[i-1][p]+(p-q)*f+q*s));
// printf("%d\n",dp[i][q]);
}
}
else
{
for(q=p;q<=max;q++)
{
if(q>=a[i])
dp[i][q]=min(dp[i][q],(dp[i-1][p]+(q-p)*h+q*s));
else
{
dp[i][a[i]]=min(dp[i][a[i]],(dp[i-1][p]+(a[i]-p)*h+a[i]*s));
}
}
//dp[i][a[i]]=min(dp[i][a[i]],(dp[i-1][p]+(a[i]-p)*h+q*s));
//dp[i][a[i]]=min(dp[i][a[i]],(dp[i-1][p]+(a[i]-p)*h+a[i]*s));
}
}
if(max<a[i])max=a[i];
if(a[i]<min)min=a[i];
}
//for(i=0;i<n;i++)
for(j=a[n-1];j<=max;j++)
{mmax=min(mmax,dp[n-1][j]);}
printf("%d\n",mmax);
}
return 0;
}
把我的source code 贴进去看看能不能ac.
我都不想再争执了。
[
本帖最后由 Devil_W 于 2010-4-13 17:05 编辑 ]