BZOJ2748_音量调节_KEY

题目传送门

我不得不说这是一道BZOJ的大水题。

一眼就可以看出的布尔型DP。

F[i][j]表示前i天能否达到j音量。

code

#include <cstdio>
#include <cctype>
#define C c = tc ( )
using namespace std;

inline char tc(){
    static char fl[100000],*A,*B;
    return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}

inline void read(int &x){
    static char c;
    while(!isdigit(C));x=c-'0';
    while(isdigit(C))x=x*10+c-'0';
}

int n,bx,mx,a[51],f[51][1001];

int main(){

    freopen("sounds.in","r",stdin);
    freopen("sounds.out","w",stdout);

    read(n),read(bx),read(mx);
        for(int i=1;i<=n;i++)read(a[i]);
    f[0][bx]=1;
        for(int i=1;i<=n;i++){
            for(int j=0;j<=mx;j++){
                if(j-a[i]>=0) f[i][j]|=f[i-1][j-a[i]];
                if(j+a[i]<=mx)f[i][j]|=f[i-1][j+a[i]];
            }
        }   
        for(int i=mx;i>=0;i--)
            if(f[n][i]){
                printf("%d",i);
                return 0;
            }
    puts("-1");
    fclose(stdin),fclose(stdout);
    return 0;
}

 

想知道fread读优怎么打的C++同志看这儿→
YZ哥哥读入优化

 

posted @ 2017-09-25 19:16  Cptraser  阅读(126)  评论(0编辑  收藏  举报