Version One
题意
状态转移方程:
d
p
[
i
]
[
j
]
=
d
p
[
i
−
1
]
[
j
−
w
[
i
]
]
+
d
p
[
i
−
1
]
[
j
−
w
[
i
]
/
2
]
dp[i][j] = dp[i - 1][j - w[i]] + dp[i - 1][j - w[i]/2]
dp[i][j]=dp[i−1][j−w[i]]+dp[i−1][j−w[i]/2]
CODE
const int N = 2e3 + 7;
ll dp[N], a[N];
int main()
{
IOS;
int n, m; cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
dp[0] = 1;
for (int i = 1; i <= n; i++)
{
for (int j = m; j >= a[i]/ 2; j--)
{
if (j >= a[i])
dp[j] = (dp[j] + dp[j - a[i]]) % mod;
dp[j] = (dp[j] + dp[j - a[i] / 2]) % mod;
}
}
for (int i = 1; i <= m; i++)
cout << dp[i] << " ";
return 0;
}