C++有n个整数a1,a2,...,an,从中选出一些数字,使它们的和为偶数。最多可以选几个数字?
时间: 2024-03-08 19:50:51 浏览: 60
可以使用动态规划的思想来解决这个问题。
我们定义一个二维数组dp[i][j],表示前i个整数中选取若干个数,使得它们的和为j时能选取的最多的数字个数。
对于每一个数字ai,它可以被选中也可以不被选中。
如果不选这个数字,那么dp[i][j]的值就等于dp[i-1][j];
如果选这个数字,那么dp[i][j]的值就等于dp[i-1][j-ai]+1,其中加1表示选中了这个数字。
最后,我们只需要求出dp[n][0]的值,就是最多可以选取的数字个数。
下面是C++代码实现:
```c++
#include<iostream>
#include<cstring>
using namespace std;
const int N = 105;
int a[N];
int dp[N][N*100];
int main()
{
int n;
cin >> n;
int sum = 0;
for(int i = 1; i <= n; i ++){
cin >> a[i];
sum += a[i];
}
memset(dp, -0x3f, sizeof dp);
dp[0][0] = 0;
for(int i = 1; i <= n; i ++){
for(int j = 0; j <= sum; j ++){
dp[i][j] = dp[i-1][j];
if(j >= a[i]) dp[i][j] = max(dp[i][j], dp[i-1][j-a[i]]+1);
}
}
int res = 0;
for(int j = 0; j <= sum; j += 2){
res = max(res, dp[n][j]);
}
cout << res << endl;
return 0;
}
```
阅读全文