codeforces Gym 101102A

来源:互联网 发布:灵魂摆渡类似的网络剧 编辑:程序博客网 时间:2024/05/22 13:31

这个就是背包,背包专题做少了,再来20道吧,这是约旦的比赛
dp还是弱啊。。。。

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int MaxN = 15000 + 10;const int mol = 1e9 + 7;LL a[MaxN] , b[MaxN] , f[MaxN] , g[MaxN];int t , n , m , k , w;void pdo(){    memset(f , 0 , sizeof(f));    memset(g , 0 , sizeof(g));    f[0] = (LL)1;//这个是这么回事,0为一种方案    for(int i = 0 ; i < n ; i++){        for(int j = w ; j >= a[i] ; j--){//选取a            f[j] = (f[j] + f[j - a[i]])%mol;//这个是这么回事,        }    }    g[0] = (LL)1;//0,为一种方案    for(int i = 0 ; i < m ; i++){        for(int j = w ; j >= b[i] ; j--){//选取b            g[j] = (g[j] + g[j - b[i]])%mol;//j为钱数,还有算b[i]钱数        }    }    LL ans = 0;    for(int i = 0 ; i <= w ; i++){        if(abs(i - (w - i)) <= k){//判断小于k            ans = (ans + g[i] * f[w - i])%mol;//然后g,f,符合条件相乘        }    }    printf("%d\n",ans);}int main(){    scanf("%d",&t);    while(t--){        scanf("%d %d %d %d",&n ,&m ,&k ,&w);        for(int i = 0 ; i < n ; i++) scanf("%d",&a[i]);        for(int i = 0 ; i < m ; i++) scanf("%d",&b[i]);        pdo();    }}
0 0
原创粉丝点击