diff --git a/CDOJ/594.cpp b/CDOJ/594.cpp new file mode 100644 index 0000000..9310c91 --- /dev/null +++ b/CDOJ/594.cpp @@ -0,0 +1,71 @@ +#include +#include +#include +#include +using namespace std; + +#define MAXN 50100 +#define MAXH 110 +#define MAXVAL_H 100 +#define INF 0x3f3f3f3f + +int dp[2][MAXH]; +int bus[MAXH]; + +int main() +{ + int N,C; + while(scanf("%d %d",&N,&C)==2) + { + /// Main Loop + int x; + scanf("%d",&x); + int index=0; + ///由于人无法变矮,因此这部分的花费记为INF + for(int i=0;i 大(N) + for(int k=0;k<=MAXVAL_H;k++) + { + int cost=dp[!index][k]-k*C; + /// Pop Back + while(begin cost) end--; + /// Push Back + bus[end++]=cost; + if(k=0;k--) + { + int cost=dp[!index][k]+k*C; + /// Pop Back + while(begin cost) end--; + /// Push Back + bus[end++]=cost; + if(k>=x) + { + dp[index][k]=min(dp[index][k],bus[begin]-k*C+(k-x)*(k-x)); + } + } + } + int ans=INF; + for(int i=0;i<=MAXVAL_H;i++) + { + ans=min(dp[index][i],ans); + } + printf("%d\n",ans); + } + return 0; +}