hdu 4526

来源:互联网 发布:python def的作用 编辑:程序博客网 时间:2024/05/29 13:44

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4526

思路:dp[i][j]表示前i辆车送走j个acmer的最小花费,然后就有dp[i][j]=dp[i-1][j-k]+k*t+d;(t为车辆到达的时间,d为花费),值得注意的地方是dp[0][0]=0,而其余都应该初始化为inf.

 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 #define inf 1<<30 7 int n,k,d,s,t,z; 8 int dp[111][111]; 9 //dp[i][j]表示前i辆车送走j的acmer的最小花费,则有dp[i][j]=min(dp[i][j],dp[i-1][j-p]+p*time[i]+d);10 11 int main(){12     int _case;13     scanf("%d",&_case);14     while(_case--){15         scanf("%d%d%d%d",&n,&k,&d,&s);16         for(int i=0;i<=k;i++)17             for(int j=0;j<=n;j++)18                 dp[i][j]=inf;19         dp[0][0]=0;20         for(int i=1;i<=k;i++){21             scanf("%d%d",&t,&z);22             for(int j=0;j<=n;j++){23                 dp[i][j]=dp[i-1][j];24                 for(int k=1;k<=z;k++){25                     if(j>=k){26                         dp[i][j]=min(dp[i][j],dp[i-1][j-k]+k*t+d);27                     }28                 }29             }30         }31         if(dp[k][n]<inf){32             printf("%d\n",dp[k][n]);33         }else 34             puts("impossible");35     }36     return 0;37 }38 39 40 41     
View Code

 

0 0
原创粉丝点击