这道题用set会很快。。。
需要注意的是我最开始陷入了死循环 ,注意要使用2个set集进行交替运算,一个保留原始数据,另一个向中加数,这样才不会死循环
在我的代码中,s负责储存所有的结果,而t则不断复制s的数据,这样就可以避免不断加入数据导致的循环无限
#include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #include <string> #include <cstring> #include <cstdio> #include <sstream> #include <stack> #include <map> #include <set> using namespace std; typedef long long ll; int main() { int n,m[15],x[15]; int a[100]; int i,j; set<int>s; s.insert(0); cin>>n; for(i=1; i<=n; i++) //重量 { cin>>m[i]; } for(i=1; i<=n; i++) //数量 { cin>>x[i]; } for(i=1; i<=n; i++) { int sum=0; set<int>t(s); for(j=1; j<=x[i]; j++) { sum+=m[i]; for(auto it=t.begin(); it!=t.end(); it++) { s.insert(*it+sum); } } } cout<<s.size()<<endl; return 0; }