元素和 TLE0分求调

用for遍历

不会超时吗

不会

只有 10^4

实在不行你定义成全局变量

俺也一样

又,来了个书友

OK的

#include <bits/stdc++.h>
using namespace std;
int m, x[35], f[35][1005], ans;
void solve() {
	
	cin >> m;
	for (int i = 1; i <= m; i++) {
		cin >> x[i];
	}
	f[0][0] = 1;
	sort(x + 1, x + m + 1);
	for (int i = 1; i <= m; i++) {
		for (int j = x[1]; j <= x[m]; j++) {
			if (j <= x[i]) {
				continue;
			}
			f[i][j] = f[i-1][j] + f[i-1][j-x[i]];
		}
	}
	for (int i = 1; i <= m; i++) {
		ans += f[i-1][x[i]];
	}
	cout << ans << endl;
}

int main() {
	int t;
	cin >> t;
	while (t--) {
		solve();
	}
	return 0;
}

Does this is??(是这样吗)

啊吧啊吧

我好像改对了

改哪里了

伪代码:

		_________________
		f[_][_____] = 1;
		f[_][_] = 1;
		f[_][_] = 1;
		for(int i = 2; i <= m; i++)
		{
			for(int j = 0; j < _____; j++)
			{
				f[i][j] += f[i - 1][j];
				if(j _ ____) continue;
				f[_][_] += f[i - 1][j - ____];
			}
		}
		for(int i = _; i _____; i++)
		{
			ans += ____________;
		}

注:是核心代码

for从0开始

sort(x, x + m)

#include <bits/stdc++.h>
using namespace std;
int m, x[35], f[35][1005], ans;
void solve() {
	
	cin >> m;
	for (int i = 0; i < m; i++) {
		cin >> x[i];
	}
	f[0][0] = 1;
	sort(x, x + m);
	for (int i = 0; i < m; i++) {
		for (int j = 0; j <= x[m]; j++) {
			if (j <= x[i]) {
				continue;
			}
			f[i][j] = f[i-1][j] + f[i-1][j-x[i]];
		}
	}
	for (int i = 0; i < m; i++) {
		ans += f[i][x[i+1]];
	}
	cout << ans << endl;
}

int main() {
	int t;
	cin >> t;
	while (t--) {
		solve();
	}
	return 0;
}

Does that is?(是哪样嘛)

给你挖个空,剩下的自己填:

#include <bits/stdc++.h>
using namespace std;

void solve()
{
	int m, x[35], ans = 0;
	cin >> m;
	for (____________)
	{
		cin >> x[i];
	}
	sort(_____________________);

	int max_sum = x[m - 1];  //
	int dp[1005] = {0};
	dp[0] = 1;

	for (_____________________)
	{
		if (____________________)
		{
			ans += ________________-;
		}
		for (int j = max_sum; j >= x[i]; j--)
		{
			dp[j] += dp[j - ________________];
		}
	}

	cout << ans << endl;
}

int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		solve();
	}
	return 0;
}

这个“-”号干什么用

没用

你把他删了