码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3046 DP

时间:2015-04-29 00:33:20      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:

必须优化dp数组,因为每次更新必须用到前一阶段和本阶段的数据,不能简单的把数组改成一维,我开了两个数组滚动使用

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxv=1e5+30;
int mod=1000000;
int t,a,s,b;
int dp1[maxv];
int dp2[maxv];
int f[1005];
int main(){
    freopen("in","r",stdin);
    cin>>t>>a>>s>>b;
    int kk;
    for(int i=1;i<=a;i++){ 
    scanf("%d",&kk);
    f[kk]++;
    }
    memset(dp1,0,sizeof dp1);
    dp1[0]=1;
    int *now=dp2,*pre=dp1;
    for(int i=1;i<=t;i++){ 
        for(int j=0;j<=a;j++){
            now[j]=((now[j-1]+pre[j])%mod-(j-1-f[i]>=0?pre[j-1-f[i]]:0)+4*mod)%mod;
        }
        swap(now,pre);
    }
    int ans=0;
    for(int i=s;i<=b;i++) ans=(pre[i]+ans)%mod;
    cout<<ans<<endl;
    return 0;
}

 

POJ 3046 DP

标签:

原文地址:http://www.cnblogs.com/Cw-trip/p/4464194.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!