diff --git a/CDOJ/594_ka200812.cpp b/CDOJ/594_ka200812.cpp new file mode 100644 index 0000000..f25789f --- /dev/null +++ b/CDOJ/594_ka200812.cpp @@ -0,0 +1,62 @@ +#include +#include +#include +#include +using namespace std; +#define inf 0xfffffff +#define min(a,b) ab?a:b + +int dp[2][101]; +int n,c; +int q[101]; +int head,tail,cur; + +int main() +{ + int i,j,x,nowf; + //freopen("D:\\in.txt","r",stdin); + while(scanf("%d%d",&n,&c)==2) + { + scanf("%d",&x); + cur=0; + for(i=0;inowf) + tail--; + q[tail++]=nowf; + if(j=0;j--) //当身高为j时候,队列里便已经保存了100~j+1的信息,正写反写是有技巧的 + { + nowf=dp[1-cur][j]+j*c; + while(headnowf) + tail--; + q[tail++]=nowf; + if(j>=x) + dp[cur][j]=min(dp[cur][j],q[head]-j*c+(x-j)*(x-j)); + } + } + int ans=inf; + for(i=0;i<=100;i++) + ans=min(ans,dp[cur][i]); + printf("%d\n",ans); + } + return 0; +}