元素和 TLE0分求调

  1. 元素和
    题目ID:7688必做题100分
    最新提交:
    Time Limit Exceeded
    0 分
    历史最高:
    Time Limit Exceeded
    0 分
    时间限制: 1000ms
    空间限制: 524288kB
    题目描述
    Bessie 有一个集合,集合中有一些元素,她发现某些元素可以表示成另几个元素的和,如 {1,2,3} 中就有 3=1+2,而 3=2+1被看成与 3=1+2 是相同的式子。
    Bessie 想知道她的集合中有多少组这样的元素和。
    输入格式
    第一行为 t,表示测试数据组数。
    接下来 t 行,每行表示一组测试数据。其中第一个数 m,表示集合元素的个数,接下来 m 个不同的整数 x 分别表示集合元素。
    输出格式
    对于每个输入数据,输出一个整数,表示其中元素和的个数。
    输入输出样例
    输入
3
3 1 2 3
3 1 2 5
6 1 2 3 5 4 6

输出

1
0
7

数据规模与约定1≤t≤10,1≤m≤30,1≤x≤1000

本帅哥的代码

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

void solve() {
	int m, x[35], f[35][1005] = {0}, ans = 0;
	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;
}

@徐崇彦 在吗??

不是,大哥
你的样例都没有过啊!!
image

是没过呀o_o

没过才要问

(他和我同班的)他就是想知道怎么改,不管是样例没过还是TLE。

还有,第二个本来就输出0,我是对的( )

顺便教一下本蚂蚁吧,我也在卡该题(已有思路)

OK
让俺康康

@徐崇彦 f[35][1005] = {0}你这是全复制成0吗??

后面还把f[0][0] = 1

那二维数组好像不能这么初始化

那怎么办呢

好像要便利

\Large{遍历}

遍历吧

那怎么

“便利”

用memset吗

f[35][1005]
遍历

for ( ……)

·memset·更不行