#include <iostream> #include <vector> #include <set> using namespace std; //将个数和重量全部组合一次,组合结果存入set中,会自动去重,最后输出set个数即为能组合的最大方案数 int main() { int n; while(cin>>n){ vector<int> w(n); vector<int> num(n); set<int> st; for(int i=0;i<n;i++) cin>>w[i]; for(int i=0;i<n;i++) cin>>num[i]; st.insert(0);//0是一种方案 for(int i=0;i<n;i++){//对于每一种重量的砝码 for(int j=1;j<=num[i];j++){ set<int> temp(st);// 相当于重新设置一个set,并将之前的s插入到t中,对t遍历, /*如果直接遍历原来的s,假如s里面是0,1,2;你现在v[i]是1,那么应该对s插入1,2,3, 当你插入3的时候s.size()增加1,变成0,1,2,3;这时候会继续遍历s最后一位3, s插入3+1=4,s变成0,1,2,3,4;s.size()再增加1,s继续插入4+1,之后无限循环不会停止*/ for(auto it: temp) st.insert(it + w[i]); } } cout<< st.size()<<endl; } return 0; } // 64 位输出请用 printf("%lld")