dp

http://acm.hdu.edu.cn/showproblem.php?pid=4842

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int l,s,t,m,x;
int a[120],dp[120][15],b[120];
int ans;
int judge(int n){
    if(n>(s-1)*s){
        return 1;
    }
    if(n<0){
        return 0;
    }
    return b[n];
}
void learn()
{
    int i,j;
    memset(b,0,sizeof(b));
    memset(dp,0,sizeof(dp));
    for(i=0;i<=m;i++){
        for(j=0;j<t;j++){
            dp[i][j]=m+1;
        }
    //    cout<<dp[i][0]<<" ";
    }
//    cout<<dp[2][2];
    b[0]=1;
    for(i=1;i<=100;i++){
        for(j=s;j<=t;j++){
            b[i]=b[i]||b[i-j];
        }
    }
    a[0]=0;
    dp[0][0]=0;
    int v;
    for(i=1;i<=m;i++){
        for(j=0;j<t;j++){
            if(a[i]-j<=a[i-1]){
                dp[i][j]=dp[i-1][j-a[i]+a[i-1]];
            }
            else{
                for(v=0;v<t;v++){
                    if(judge(a[i]-j-a[i-1]+v)&&dp[i-1][v]<dp[i][j]){
                        dp[i][j]=dp[i-1][v];
                    }
                }
            }
            if(j==0){
                dp[i][j]++;
            }
        //    cout<<dp[i][j]<<" ";
        }
    //    cout<<endl;
    }
    ans=m+1;
    for(i=0;i<t;i++){
        if(dp[m][i]<ans){
            ans=dp[m][i];
        }
    //    cout<<dp[m][i]<<" ";
    }
    cout<<ans;
}
int main()
{
    int flag=1;
    while(scanf("%d",&l)!=EOF){
        if(flag!=1){
            cout<<endl;
        }
        else{
            flag=0;
        }
        cin>>s>>t>>m;
        memset(a,0,sizeof(a));
        for(int i=1;i<=m;i++){
            cin>>a[i];
        }
        sort(a+1,a+1+m);
        if(s==t){
            int ans1=0;
            for(int i=1;i<=m;i++){
                if(a[i]%s==0){
                    ans1++;
                }
            }
            cout<<ans1;
        }
        else{
            learn();
        }
    }
    return 0;
}

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1149

博客https://blog.csdn.net/u013712847/article/details/51886731

posted @ 2018-11-24 14:24  .。  阅读(113)  评论(0编辑  收藏  举报