解这道题用了一种很笨的方法,具体思路可以直接看代码,通俗易懂。(可以通过所有测试点)
#include<bits/stdc++.h>
using namespace std;
int a[100000];
int a_copy[100000];
int main()
{
memset(a,0,sizeof(a));
memset(a_copy,0,sizeof(a_copy));
int n;
cin>>n;
int b[101];
for(int i = 0 ; i<n;i++)
{
cin>>b[i];
}
a[b[0]] = 1;
for(int i = 1 ; i<n;i++) //b[i] 新的一个数
{
for(int j = 1;j<1000;j++)
{
if(a[j] == 1) //说明j可以称量
{
a_copy[j+b[i]] = 1;
//cout<<j+b[i]<<" OK--1!"<<endl;
a_copy[abs(j-b[i]) ] = 1;
//cout<<abs(j-b[i])<<" OK--2!"<<endl;
}
}
a[b[i]] = 1; //cout<<b[i]<<" OK--3!"<<endl;
for(int qq = 1;qq<100000;qq++)
{
if(a_copy[qq]==1)
{
a[qq] = 1;
a_copy[qq] = 0;
}
}
}
//cout<<"-------------------------------"<<endl;
int ans = 0;
for(int i = 1 ; i < 100000;i++)
{
if(a[i] == 1) {
ans++;
//cout<<i<<" ";
}
}
//cout<<endl;
cout<<ans;
return 0;
}