称砝码(搜索\暴力枚举)

来源:互联网 发布:时间倒计时软件 编辑:程序博客网 时间:2024/06/05 03:40
#include<bits/stdc++.h>using namespace std;int n,m[20],x[20],total,cnt;bool flag[10*6*2000+1000];void dfs(int num,int sum)    {    if(num==n)return ;    for(int i=0;i<=x[num];i++)        {        dfs(num+1,sum+i*m[num]);         flag[sum+i*m[num]]=1;    }}int main()    {    while(cin>>n)        {        total=0,cnt=0;        memset(flag,0,sizeof(flag));        for(int i=0;i<n;i++)            cin>>m[i];        for(int i=0;i<n;i++)            cin>>x[i];        for(int i=0;i<n;i++)            total+=m[i]*x[i];        dfs(0,0);        for(int i=0;i<=total;i++)            if(flag[i]==1)cnt++;        cout<<cnt<<endl;    }    return 0;}
#include <iostream>  #include <set>    using namespace std;    int fama(int n, int* w, int* nums)  {      set<int> iset;      int i,j;      int sum=0;      set<int>::iterator iter;      for(i=0;i<n;i++)          sum+=w[i]*nums[i];      iset.insert(sum);      for(i=0;i<n;++i)      {          iter=iset.begin();          while(iter!=iset.end())          {              for(j=0;j<=nums[i];j++)                  iset.insert(*iter-j*w[i]);              ++iter;          }      }        return iset.size();  }    int main()  {      int n,i;      int *w,*num;      while(cin>>n)      {          w=new int[n];          for(i=0;i<n;i++)              cin>>w[i];          num=new int[n];          for(i=0;i<n;i++)              cin>>num[i];          cout<<fama(n,w,num)<<endl;          delete [] w;          delete [] num;      }      return 0;  }  


原创粉丝点击