hdu1158 動態規劃

來源:互聯網
上載者:User

http://acm.hdu.edu.cn/showproblem.php?pid=1158

狀態轉移方程:dp[i][j]=min(dp[i-1][k]+extra(k,j)+pay*k);  a[i-1]<=k<=max(a);

這其中還有點細節要注意 當i==1時  dp[i][j]=dp[i-1][0]+extra(0,j)+p*k;

extra (i,j)  是當人數從i變為j時需要的花費。

#include<iostream>#include<cstdio>#include<cstring>#define inf 222222222using namespace std;int h,f,p;int small(int a,int b){return a>b?b:a;}int a[15];int dp[13][100000];int extra(int i,int j){if(i<j)return (j-i)*h;else if(i>j)return (i-j)*f;else return 0;}int main(){int n;while(scanf("%d",&n),n){scanf("%d%d%d",&h,&p,&f);int i;int min=222222222,max=0;a[0]=0;for(i=1;i<=n;i++){scanf("%d",&a[i]);if(a[i]<min)min=a[i];if(a[i]>max)max=a[i];}int j;for(i=0;i<=n;i++){for(j=min;j<=max;j++){if(i==0)dp[i][j]=0;elsedp[i][j]=inf;}}int k;for(i=1;i<=n;i++){for(j=a[i];j<=max;j++){if(i==1){dp[i][j]=dp[i-1][0]+extra(0,j)+p*j;}elsefor(k=a[i-1];k<=max;k++)dp[i][j]=small(dp[i][j],dp[i-1][k]+extra(k,j)+p*j);}}min=inf;for(i=a[n];i<=max;i++){if(dp[n][i]<min)min=dp[n][i];}printf("%d\n",min);}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.