#python2 while True: try: n=int(input()) m=map(int,raw_input().split()) x=map(int,raw_input().split()) diff={0} for i in range(n):#在确定前面砝码的基础上依次添加各个质量的砝码,每次添加后查看是否和之前的有重复 d=diff.copy()#重复的不计入 for j in range(x[i]): for k in d: temp=k+m[i]*(j+1)#因为添加砝码是从一个开始添加,依次添加到每种砝码的最大数量(x[i]),所以此处为j+1 if temp not in d:#否则就是从0添加到x[i]-1个砝码 diff.add(temp) print(len(diff)) except: break
#python3 while True: try: n=int(input()) m=list(map(int,input().split()))#python3这块没有python2来的直接,需要用list转换一下 x=list(map(int,input().split())) diff={0} for i in range(n): d=diff.copy() for j in range(x[i]): for k in d: temp=k+m[i]*(j+1) if temp not in d: diff.add(temp) print(len(diff)) except: break
#include <iostream> #include <vector> #include <algorithm>//用到find()函数 using namespace std; int fama(int n, int *weight, int *nums){//C++函数接口用指针,不同于题目给的接口 vector<int> res;//存入已经称好的砝码质量 res.push_back(0); for(int i=1;i<=nums[0];i++) res.push_back(i*weight[0]);//将第一个砝码能称出的质量放入res,即依次放入1、2、...、x[0]个砝码,这些砝码的质量都为m[0] for(int i=1;i<n;i++){//依次添加后续质量的砝码 int len=res.size(); for(int j=1;j<=nums[i];j++){ for(int k=0;k<len;k++){ int w=res[k]+j*weight[i]; if(find(res.begin(),res.end(),w)==res.end()) res.push_back(w); } } } int len=res.size(); return len; } int main(){ int n,res; int m[10]={0}; int x[10]={0}; while(cin >> n){ for(int i=0;i<n;i++) cin >> m[i]; for(int i=0;i<n;i++) cin >> x[i]; res=fama(n, m, x); cout << res << endl; } return 0; }