hdu 4011 The 36th ACM/ICPC Asia Regional Shanghai Site —— Warmup Working in Beijing
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxx=100002;int day[maxx];__int64 dp[maxx][2];//dp[i][0]表示第i次出差去上海并回到北京的最小
hdu 4011 hdu 4011 hdu 4011 hdu 4011
优化了一下,本题因为状态转移方程是临近状态之间的转移,所以可以改为贪心。代码如下
#include <iostream> #include <cstdio> using namespace std; int s[100002]; __int64 min(__int64 a,__int64 b){ return a<b?a:b; } int main(){ int ca; scanf("%d",&ca); for(int t=1;t<=ca;t++){ int n,a,b; __int64 sum=0; scanf("%d%d%d",&n,&a,&b); for(int i=0;i<n;i++){ scanf("%d",&s[i]); } sum+=a*2+b;//刚开时必须去上海花费a工资b,最后一次必须回北京花费a for(int i=1;i<n;i++){ __int64 x,y; x=(s[i]-s[i-1])*b;//上次不用回去,只需加上延误的时间 y=2*a+b; //表示上次回去,所以先加上回去的费用a sum+=min(x,y);//每次sum记录到上次来到上海的最小花费 } printf("Case #%d: %I64d\n",t,sum); } return 0; }
更多推荐
所有评论(0)