hdu 1158

来源:互联网 发布:河南软件大学排名 编辑:程序博客网 时间:2024/05/18 03:06

很经典的动态规划。

import java.util.Scanner;public class Main {    public static void main(String[] args)    {        Scanner cin=new Scanner(System.in);        int n=cin.nextInt();        while(n!=0)        {            int h=cin.nextInt();            int s=cin.nextInt();            int f=cin.nextInt();            int minP[]=new int[n+1];            int maxP=0;            for(int i=1;i<=n;i++)            {                minP[i]=cin.nextInt();                maxP=Math.max(maxP, minP[i]);            }            int cost[][]=new int[n+1][maxP+1];            for(int i=minP[1];i<=maxP;i++) cost[1][i]=i*(h+s);            for(int i=2;i<=n;i++)            {                for(int j=minP[i];j<=maxP;j++)                {                    cost[i][j]=Integer.MAX_VALUE;                    for(int k=minP[i-1];k<=maxP;k++)                    {                        if(k<j)                        {                            cost[i][j]=Math.min(cost[i-1][k]+(j-k)*h+j*s, cost[i][j]);                        }                        else                        {                            cost[i][j]=Math.min(cost[i-1][k]+(k-j)*f+j*s, cost[i][j]);                        }                    }                }            }            int minCost=cost[n][minP[n]];            for(int i=minP[n]+1;i<=maxP;i++)minCost=Math.min(minCost,cost[n][i]);                System.out.println(minCost);            n=cin.nextInt();        }    }}



 

原创粉丝点击