题目链接:https://www.luogu.com.cn/problem/P8742

大意是给出砝码,求称出的重量的数量。

经过观察,发现新给出的第i个砝码,只是在第i-1个砝码的基础上产生印象。因此只需要两张映射表做一个滚动数组即可

code:

const int nn = 1e5+10;
const int N = 110;
bool sign[nn];
bool tsign[nn];
int main()
{
 	//cin.ignore(numeric_limits<streamsize>::max(),'\n')
 	int n;
 	cin>>n;
 	int x;
 	int sum = 0;
 	tsign[0] = true;
 	sign[0] = true;
 	for(int i=1;i<=n;i++){
 		cin>>x; sum+=x;
 		for(int j=0;j<=sum-x;j++){ // 枚举之前的总量
 			if(tsign[j]){
				sign[j+x] = true;
 				sign[abs(j-x)] = true;
			}
		}
		for(int j=0;j<=sum;j++)
			tsign[j] = sign[j];
	}
	int ans = 0;
	for(int i=1;i<nn;i++){
		if(sign[i]) ans++;
	}
	cout<<ans<<endl;
}