【算法题】所有和为奇数子序列之和

小红拿到了一个长度为n的数组。她定义一个子序列是“好的”,当且仅当该子序列所有元素之和为奇数。现在小红想求出所有“好的”子序列的元素和之和。你能帮帮她吗?由于答案可能过大,请对10^9+ 7取模。定义一个数组的子序列是,数组中取若干元素(可以不连续)按原数组顺序形成的新数组。

输入描述
第一行输入一个正整数n,代表小红拿到的数组。
第二行输入几个正整数aia_iai,代表数组中的元素。
输出描述
所有“好的”子序列的元素和之和,答案对10^9+ 7取模。

示例
输入

3
1 3 2

输出

12

说明
好的子序列有以下几个:
[1],[3],[1,2],[3,2],答案是1+3+3+5=12

思路:选择其中奇数个奇数,然后选择任意个偶数,都能形成好序列。所以将每个数乘以它在所有子序列中出现的次数,并求和即可。

  • 对于奇数来说,出现次数是在奇数集合里出现的次数,乘以偶数集合的所有子集数
  • 对于偶数来说,出现次数是在偶数集合里出现的次数,乘以奇数集合的所有奇数个子集数

Java代码:未经验证

public class Test {
   
   
    static final int MOD = 1000000007;

    public static void main(String[] args) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值