hdu-6140Hybrid Crystals

来源:互联网 发布:李嫣兔唇原因知乎 编辑:程序博客网 时间:2024/05/16 01:59

题意:L是加的数,D是减的数,N可加可减。给定ai和k问,是否能满足从ai中选一个集合,使得集合里的数的和为k。

给定的ai和字符串满足

      aij=1i1aj[bj=N]+j=1i1aj[bi=Lbj=L]+j=1i1aj[bi=Dbj=D](2in).

不想多说。。答案就是-D - N <= k <= L+N,被气哭 在赛场上。学到了一点,在赛场上不仅要关注ac的题,还要关注别人的时间复杂度~。

#include <iostream>#include<stdio.h>#include<algorithm>#include<string.h>#define siz 1005const long long  mod = 1e9+7;typedef long long LL;using namespace std;//int dp[(siz)*(siz)][2];char s[siz];int gp[siz];int n,k;void solve(){    LL mx = 0,mi = 0;    for(int i=1;i<=n;i++){        if(s[i]=='L'||s[i] == 'N') mx += gp[i];        if(s[i]=='D'||s[i] == 'N') mi += -gp[i];    }    //cout<<mx<<" "<<mi<<endl;    if(k>=mi&&k<=mx) printf("yes\n");    else printf("no\n");}int main(){    int T;    scanf("%d",&T);    while(T--){        scanf("%d%d",&n,&k);        for(int i=1;i<=n;i++){            scanf("%d",&gp[i]);        }        for(int i=1;i<=n;i++){            getchar();            scanf("%c",&s[i]);        }        solve();    }    return 0;}



原创粉丝点击