2018ICPC網路賽焦作K Transport Ship 二進位制優化DP
阿新 • • 發佈:2018-12-10
利用二進位制只做有效操作
#include<bits/stdc++.h> using namespace std; const int MAX=1e4+1; const long long MOD=1e9+7; int v[21],c[21],t,n,m,s; long long dp[MAX]; int main() { scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); dp[0]=1; scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) { scanf("%d%d",&v[i],&c[i]); long long tmp=1; for(int j=1;j<=c[i];++j) { for(int k=10000;k>=v[i];--k) dp[k]=(dp[k]+dp[k-tmp*v[i]])%MOD; tmp<<=1; } } while(m--) { scanf("%d",&s); printf("%lld\n",dp[s]); } } return 0; }