51nod1354 选数字

题目
题解
总感觉这个背包有点奇怪

#include<bits/stdc++.h>
using namespace std;
const int M=1e9+7;
map<int,int>tmp,mp;
map<int,int>::iterator it;
int T,n,k,i,t,a[1002];
int main(){
    scanf("%d",&T);
    while (T--){
        scanf("%d%d",&n,&k);
        mp.clear();
        for (i=0;i<n;i++){
            scanf("%d",&a[i]);
            if (k%a[i]==0){
                tmp=mp;
                for (it=tmp.begin();it!=tmp.end();it++){
                    t=a[i]*it->first;
                    if (k%t==0) (mp[t]+=it->second)%=M;
                }
                mp[a[i]]++;
            }
        }
        printf("%d\n",mp[k]);
    }
}

猜你喜欢

转载自blog.csdn.net/xumingyang0/article/details/80850062