CF479 Riding in a Lift

来源:互联网 发布:中科院数据共享平台 编辑:程序博客网 时间:2024/06/08 17:02

题目:http://codeforces.com/problemset/problem/479/E
分析:前缀和优化的DP.一开始写跪了,但今天几分钟写出来了,于是得出一个结论:千万不要吝啬一个变量,只要能简化代码!
代码:

#include <cstdio>#include <algorithm>using namespace std;const int Tmax=5005;const long long int MOD=1000000007;int n,a,b,k;long long int f[Tmax][Tmax],sum[Tmax],ans;void work(){    int i,j,x;    f[0][a]=1;    for(i=1;i<=k;i++)    {        sum[0]=0;        for(j=1;j<=n;j++)          sum[j]=sum[j-1]+f[i-1][j];        for(j=1;j<=n;j++)        {            if(j==b) continue;            if(j>b){                x=max(0,b+abs(b-j)/2);                f[i][j]=(sum[n]-sum[x]-f[i-1][j])%MOD;            }            else {                x=min(n,b-abs(b-j)/2);                f[i][j]=(sum[x-1]-f[i-1][j])%MOD;            }        }    }    for(i=1;i<=n;i++)      ans=(ans+f[k][i])%MOD;    printf("%I64d",ans);    return;}int main(){    scanf("%d%d%d%d",&n,&a,&b,&k);    work();    return 0;}
0 0