bzoj 2748

布尔型动态规划。

f[i][j]表示第i首歌之后,音量为j是否可行。

f[i][j]=f[i-1][j-c[i]] | f[i-1][j+c[i]]。

#include<cstdio>
#include<cctype>
int read(){
    char c; while(!isdigit(c=getchar())); int x=c-'0';
    while(isdigit(c=getchar())) x=x*10+c-'0'; return x;
}
int f[51][1001];
int main(){
    int n=read(),bg=read(),mx=read();
    f[0][bg]=1;
    for(int i=1;i<=n;i+=1){
        int c=read();
        for(int j=0;j<=mx;j+=1)
            if(f[i-1][j]){
                if(j+c<=mx) f[i][j+c]=1;
                if(j-c>=0) f[i][j-c]=1;
            }
    }
    int ans=-1;
    for(int i=mx;i>=0;i--) if(f[n][i]){ans=i; break;}
    printf("%d",ans);
    return 0;
}

 

posted @ 2017-09-25 16:11  失忆的旅行者  阅读(204)  评论(0编辑  收藏  举报