递增四元组

2024-03-22 22:52
文章标签 递增 四元组

本文主要是介绍递增四元组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解法:

首先都可以想到dp[i]:第i个元素结尾的递增四元组有dp[i]个

然后发现有一组数据:2,3,6,1,5,8。会出现6结尾和5结尾的递增三元组,也就是未来的决策受过去影响,专业的说就是有后效性。需要强化约束条件,于是使用dp[i][j]。

第i个元素结尾的递增j元组有dp[i][j]个,显然每个元素自身就是一个一元组,dp[i][0]=1.

对于第i个元素,若存在a[k]<a[i],那么就可以把a[i]加在a[k]结尾的j元组,构成j+1元组。

迭代完善dp数组即可。

见例图:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define endl '\n'
const int N = 1e3 + 3;
int dp[N][4];
int main() {int n; cin >> n;vector<int> vec(n);for (int i = 0; i < n; i++) cin >> vec[i];for (int i = 0; i < n; i++) {dp[i][0] = 1;for (int j = 1; j<4; j++) {for (int k = 0; k < i; k++) {if (vec[i] > vec[k])dp[i][j] += dp[k][j - 1];}}}int sum = 0;for (int i = 0; i < n; i++) {sum += dp[i][3];sum %= 3344;}cout << sum << endl;return 0;
}

这篇关于递增四元组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/836374

相关文章

POJ1631最长单调递增子序列

最长单调递增子序列 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;publ

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

PL/SQL工具创建Oracle数据库表,实现id字段的自动递增

通过PL/SQL工具,创建Oracle数据库表,如何实现字段ID自动递增; Oracle的自增需要依靠序列和触发器共同实现 比如:先创建一个表 create table test (id int primary key, name varchar2(10)); 创建一个序列 create sequence test_seq increment by 1 start with 1  min

回溯——8.递增子序列

力扣题目链接 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]] 说明: 给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数组中

贪心算法求无序数组最大递增序列

给定一个无序的数组,获取其最大的递增序列。下面使用贪心算法实现: 1、算法实现 void max_seq(int* arr,int len){/// 标记递增序列的开始位置int start = 0;/// 记录最大的递增序列数int max = 0;int i = 1;for( ; i<len; i++){/// 如果当前元素大于上一个元素,说明递增序列已经结束

Java中等题-递增的三元子序列(力扣)

你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。 如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。 示例 1: 输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意

微软面试题之以递增顺序打印2^i*3^j*5^k

以递增顺序打印出2^i*3^j*5^k的前n项。假设当前已经求出第x项,那么第x+1项一定是由前x项中的某项乘2,或乘3,或乘5,得到的大于第x项中最小的那个数,于是我们立即得到一个n^2的算法,代码如下 #include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAX = 1e4+10;LL

代码随想录算法训练营第二十五天| 491.递增子序列 46.全排列 47.全排列 II 51.N皇后

目录 一、LeetCode 491.递增子序列思路:C++代码 二、LeetCode 46.全排列思路C++代码 三、LeetCode 47.全排列 II思路C++代码 四、LeetCode 51.N皇后思路C++代码 总结 一、LeetCode 491.递增子序列 题目链接:LeetCode 491.递增子序列 文章讲解:代码随想录 视频讲解:回溯算法精讲,树层去重与树

深入解析C++中的前缀递增与后缀递增:为何两个循环结果不同?

目录 深入解析C++中的前缀递增与后缀递增:为何两个循环结果不同?示例代码解析第一个循环:前缀递增(++i)第二个循环:后缀递增(i++) 结论 小结: 深入解析C++中的前缀递增与后缀递增:为何两个循环结果不同? 在C++中,前缀递增(++i)和后缀递增(i++)是常见的操作符,它们在循环中的使用可以引发一些有趣的行为差异。今天,我们将通过一个具体的例子来深入探讨这两种递增方式

由递增序列生成平衡的查找二叉树

#包括“Buildable_tree.h” 模板<class Record> 无效Buildable_tree <RECORD> :: build_insert(诠释计数,常量记录和新数据,列表<Binary_node <RECORD> *>&last_node) { 整数水平; 为(等级= 1;计数%2 == 0;等级+ +) 计数/ = 2; Binary_