这道题用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;
}



京公网安备 11010502036488号