用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;
}
这个“-”号干什么用
没用
你把他删了