2022-07-09:总长度为n的数组中,所有长度为k的子序列里,有多少子序列的和为偶数?

答案2022-07-09:

方法一:递归,要i还是不要i。
方法二:动态规划。需要两张dp表。

代码用rust编写。代码如下:

use rand::Rng;
fn main() {
let nn: i32 = 20;
let vv: i32 = 30;
let test_time: i32 = 3000;
println!("测试开始");
for i in 0..test_time {
let n = rand::thread_rng().gen_range(0, nn) + 1;
let k = rand::thread_rng().gen_range(0, n) + 1;
let mut arr = random_array(n, vv);
let ans1 = number1(&mut arr, k);
let ans2 = number2(&mut arr, k);
if ans1 != ans2 {
println!("出错了!{}", i);
println!("ans1 = {}", ans1);
println!("ans2 = {}", ans2);
break;
}
}
println!("测试结束");
} fn number1(arr: &mut Vec<i32>, k: i32) -> i32 {
if arr.len() == 0 || k < 1 || k > arr.len() as i32 {
return 0;
}
return process1(arr, 0, k, 0);
} fn process1(arr: &mut Vec<i32>, index: i32, rest: i32, sum: i32) -> i32 {
if index == arr.len() as i32 {
return if rest == 0 && (sum & 1) == 0 { 1 } else { 0 };
} else {
return process1(arr, index + 1, rest, sum)
+ process1(arr, index + 1, rest - 1, sum + arr[index as usize]);
}
} fn number2(arr: &mut Vec<i32>, k: i32) -> i32 {
if arr.len() == 0 || k < 1 || k > arr.len() as i32 {
return 0;
}
let n = arr.len() as i32;
// even[i][j] : 在前i个数的范围上(0...i-1),一定选j个数,加起来是偶数的子序列个数
// odd[i][j] : 在前i个数的范围上(0...i-1),一定选j个数,加起来是奇数的子序列个数
let mut even: Vec<Vec<i32>> = vec![];
let mut odd: Vec<Vec<i32>> = vec![];
for i in 0..n + 1 {
even.push(vec![]);
odd.push(vec![]);
for _ in 0..k + 1 {
even[i as usize].push(0);
odd[i as usize].push(0);
}
}
for i in 0..=n {
// even[0][0] = 1;
// even[1][0] = 1;
// even[2][0] = 1;
// even[n][0] = 1;
even[i as usize][0] = 1;
}
for i in 1..=n {
for j in 1..=get_min(i, k) {
even[i as usize][j as usize] = even[(i - 1) as usize][j as usize];
odd[i as usize][j as usize] = odd[(i - 1) as usize][j as usize];
even[i as usize][j as usize] += if (arr[(i - 1) as usize] & 1) == 0 {
even[(i - 1) as usize][(j - 1) as usize]
} else {
odd[(i - 1) as usize][(j - 1) as usize]
};
odd[i as usize][j as usize] += if (arr[(i - 1) as usize] & 1) == 0 {
odd[(i - 1) as usize][(j - 1) as usize]
} else {
even[(i - 1) as usize][(j - 1) as usize]
};
}
}
return even[n as usize][k as usize];
} fn get_min<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {
if a < b {
a
} else {
b
}
} // 为了测试
fn random_array(n: i32, v: i32) -> Vec<i32> {
let mut ans: Vec<i32> = vec![];
for _i in 0..n {
ans.push(rand::thread_rng().gen_range(0, v));
}
return ans;
}

执行结果如下:


左神java代码

2022-07-09:总长度为n的数组中,所有长度为k的子序列里,有多少子序列的和为偶数?的更多相关文章

  1. 数组中累加和为k的最大子数组的长度

    package com.hzins.suanfa; import java.util.HashMap; public class demo { /** * 数组中累加和为k的最大子数组的长度 * @p ...

  2. [程序员代码面试指南]第9章-在两个长度相等的排序数组中找到第k小的数(二分)

    题目 给定两个有序数组arr1和arr2,再给定一个整数k,返回所有的数中第k小的数. 题解 利用题目"在两个长度相等的排序数组中找到第上中位数"的函数 分类讨论 k < 1 ...

  3. C语言 数组输出,冒泡排序法,沉底排序法,二维数组输出,输出字母列长度,从随机数组中找重复数

    #include <stdio.h> #define sum 3+4//宏定义是原封不动的使用used for test4 #include <time.h>//used fo ...

  4. 【算法30】从数组中选择k组长度为m的子数组,要求其和最小

    原题链接:codeforce 267 Div2 C 问题描述: 给定长度为n的数组a[],从中选择k个长度为m的子数组,要求和最大. 形式描述为:选择$k$个子数组[$l_1$, $r_1$], [$ ...

  5. 有序数组的平方&长度最小的子数组&螺旋矩阵Ⅱ

    一.有序数组的平方 977.有序数组的平方 leetcode链接 1.方法概述 双"指针"解法:因为数组本来是有序的,平方后可能出现的两端大数值大的情况.所以从数组两端开始遍历,谁 ...

  6. 2021.07.09 K-D树

    2021.07.09 K-D树 前置知识 1.二叉搜索树 2.总是很长的替罪羊树 K-D树 建树 K-D树具有二叉搜索树的形态,对于每一个分类标准,小于标准的节点在父节点左边,大于标准的节点在父节点右 ...

  7. LEETCODE 07 09

    最近忙着面试耽误了几天,今天刷了07,09都是字符串处理,一个是大数反转,一个是回文数判断,我都是转成字符串处理的,过了是过了,但是挺慢的,先记着,等有机会优化下 题目 给定一个 32 位有符号整数, ...

  8. 2019.07.09 纪中_B

    错失AK记 2019.07.09[NOIP提高组]模拟 B 组 明明今天的题都很水,可就是没蒟蒻. 写题的时候: T0一眼高精(结果没切)T1看到2啊8啊果断转二进制观察,发现都是左移几位然后空出的位 ...

  9. 【AcWing】第 62 场周赛 【2022.07.30】

    AcWing 4500. 三个元素 题目描述 给定一个长度为 \(n\) 的数组 \(r\_1,r\_2,-,r\_n\). 请你找到其中的三个元素 \(r\_a,r\_b,r\_c\),使得 \(r ...

  10. int(11)最大长度是多少,MySQL中varchar最大长度是多少(转)

    int(11)最大长度是多少,MySQL中varchar最大长度是多少? int(11)最大长度是多少? 在SQL语句中int代表你要创建字段的类型,int代表整型,11代表字段的长度. 这个11代表 ...

随机推荐

  1. MySQLdb安装

    yum seach MySQL-Python sudo yum install MySQL-python.x86_64 import MySQLdb

  2. KERNEL1

    WHAT IS KERNEL KERNEL是一个负责连接计算机硬件与软件的一个模块,当软件对硬件进行调用的时候,或者发送一些置零的时候,KERNEL负责将这些指令转化并发送给CPU或者计算机中其他硬件 ...

  3. 【picoCTF]cookies write up

    顾名思义,这一挑战涉及对cookie的简单操作.登录页面会显示一个搜索框,其中包含一个输入字段,用于检查您为其提供的 Cookie 类型. 点击链接,页面如下: 随便在框里输入内容,显示如下: 输出返 ...

  4. TCP通信聊天服务端和客户端(C/C++语言开发)附完整源码

    距离上次学Python写的Python实现简单聊天室已经过去好久了,现在学c++又写了一遍,其实过程差不多,无非是语法的变化,目前仅实现最简单的一对一的通信,然后改就是了,接下来应该是多线程了,话不多 ...

  5. Less-4 报错注入

    补坑:报错注入 当我们 union 无法注入的时候,可以使用报错注入,这里我们有三种报错注入,xpth语法错误和count()+rand()+floor()+group by重复组建错误 extrac ...

  6. 【读书笔记】Nice Families Of GF

    目录 Nice Families Of GF rational rational algebraic D-finite总览 下定义 逻辑关系 例子 更多的例子和判别法 运算是否有性质? 运算是否有性质 ...

  7. StyleGAN 生成 AI 虚拟人脸,再也不怕侵犯肖像权

    目录 什么是 StyleGAN 如何使用 StyleGAN 下载项目 修改项目 MSVC 运行项目 运行结果 什么是 StyleGAN GAN 是机器学习中的生成性对抗网络,目标是合成与真实图像无法区 ...

  8. Java面试——不安全的集合类

    Java 中有许多的集合,常用的有List,Set,Queue,Map. 其中 List,Set,Queue都是Collection(集合),List<String>中<>的内 ...

  9. Linux无root权限conda初始化

    pre { overflow-y: auto; max-height: 400px } img { max-width: 500px; max-height: 300px } 1. 给anaconda ...

  10. java代码审计-CSRF

    0x01 前言 CSRF跨站请求伪造(Cross-site request forgery),当某个接口没有设置CSRF验证,点击了别人恶意的链接,可能会造成对这个接口发送相应的数据,造成某个数据被更 ...