From 5090672f4360c077ce8c50a20684acd2f674bd07 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Tue, 13 Sep 2016 15:46:13 +0800 Subject: [PATCH] Create 2373_sunny606.cpp From http://blog.csdn.net/sunny606/article/details/7854362 --- POJ/2373_sunny606.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 POJ/2373_sunny606.cpp diff --git a/POJ/2373_sunny606.cpp b/POJ/2373_sunny606.cpp new file mode 100644 index 0000000..27a1ff4 --- /dev/null +++ b/POJ/2373_sunny606.cpp @@ -0,0 +1,55 @@ +#include +#define L 1001000 + +int a,b,n,l,inf,dp[L],queue[L],head,tail,size; + +void insert(int idx) +{ + tail++; + while(headdp[idx]) tail--; + queue[tail]=idx; + while(idx-queue[head]>=size) head++; +} + +int dpro(void) +{ + if(b<1) return -1; + dp[0]=0; + size=2*b+1; + head=0; + tail=-1; + + for(int i=a; i<=b; i++) if(dp[2*i]<=inf) dp[2*i]=1; + int seg = 2*b-2*a; + for(int i=0; i<=seg; i+=2) insert(i); + + for(int i=2*b; i<=l; i+=2) + { + if(i-a*2>seg) insert(i-a*2); + while(i-queue[head]>=size) head++; + if (dp[i]<=inf) dp[i]=dp[queue[head]]+1; + } + + if(dp[l]>=inf) return -1; + else return dp[l]; +} + +int main() +{ + while (scanf("%d%d", &n, &l)!=EOF) { + + scanf("%d%d", &a, &b); + inf = (l/a)+9; + for(int i=0; i<=l; i++) dp[i]=inf; + + for(int i=0; i