当前位置: 首页 > wzjs >正文

wordpress建站好用吗口碑营销有哪些

wordpress建站好用吗,口碑营销有哪些,产品设计个人作品集,十堰网站建设公司0719webD. Ball Sorting 题目: 思路: 思路想到了LIS,但是不知道怎么dp 我们先假设没有 k 的限制,即有无限个 0,那么此时的最优解是什么呢? 显然就是 n - len,其中 len 为LIS的长度,为什么…

D. Ball Sorting

题目:

思路:

思路想到了LIS,但是不知道怎么dp

我们先假设没有 k 的限制,即有无限个 0,那么此时的最优解是什么呢?

显然就是 n - len,其中 len 为LIS的长度,为什么呢?(以下的LIS代表递增子序列)

因为由于每次操作我们都可以将数插到任意位置,那么显然我们每一个数最多只需要移动一次即可到正确位置,那么如果有 k 这个限制呢?

首先从上面的结论我们可以知道,如果答案是 n - len,那么 0 的数量就得是 LIS 中间的断开区间的个数,什么意思呢?

我们举个例子,假设数组是 2 3 1 4 6 5,那么LIS就是 2 3 4 6 或 2 3 4 5,那么我们要将 1 5 放到正确位置的话就要 2 个 0(最少操作步数),如果只有 1 个 0 我们怎么分配呢?

 

我这里举例两种方式,一个是将整个区间重新排,一个是将 1 4 6 5 重新排(即绿色括号内的数)

那么答案就是绿色括号内区间的长度,这里的绿色括号就是 0 ,因为 0 可以排好任意一个区间内的所有数,所以我们显然是框选的数越少越好,那么做法就初见雏形

我们可以枚举每一个 k,即 0 的个数,然后考虑dp,那么如何dp呢?

我们可以定义 dp[i][j] 为有 i 个 0 时,LIS在 j 结尾时的最少操作数,那么如何转移呢?

首先一个显然的转移就是 dp[i][j] = dp[i-1][j],即直接从上一层转移过来

那么考虑另一个特殊情况,如果 a[i] > a[i-1] 那么 a[i] 就可以直接接在前面的 LIS 后面,且不会增加奉献,那么就有 dp[i][j] = min(dp[i][j],dp[i][j-1])

然后考虑暴力,由于我们不知道当前这个 j 当作哪个 LIS 的后面一个数奉献最少,所以直接暴力枚举前面每一种可能,我们从 0 ~ j - 1暴力寻找,如果有 a[j] > a[k] 说明我们的 j 可以当作 k 位置结尾的LIS的后一个数,如 2 3 后面可以接上 4,那么考虑奉献

如果我们选择接上去了,那么中间的数肯定都要被操作掉,如 2 3 (1) 4 ,其奉献就是 1,即LIS中间的数的个数,表示出来就是 j - k - 1,转移方程就是 dp[i][j] = min(dp[i][j], dp[i-1][k] + j - k - 1)

总结做法:考虑如何让操作最小,我们肯定是选择不需要动的数越多越好,那么就考虑LIS,对于一个LIS,由于 0 可以操作任意长度的区间,那我们考虑将 0 插入 LIS 的断开位置,那么奉献就是LIS所有断开区间的长度,显然可以考虑 dp 做法,因为我们不知道选哪个 LIS 最好

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"void solve()
{int n;cin >> n;vector<int> a(n+2);a[0] = 0, a[n + 1] = n + 1;for (int i = 1; i <= n; i++){cin >> a[i];}vector<vector<int>> dp(n + 1, vector<int>(n + 2, 1e18));//初始化一下 i = 0 时的情况,即看看不能跳时的最长LISdp[0][0] = 0;for (int i = 1; i <= n+1; i++){if (a[i] > a[i - 1])dp[0][i] = dp[0][i - 1];else break;}//枚举有 i 个 0 且LIS结尾在第 j 个数的最少操作数 for (int i = 1; i <= n; i++){for (int j = 1; j <= n+1; j++){//可以从上一个 i 转移过来dp[i][j] = dp[i - 1][j];//如果当前数可以直接连接前一个 LISif (a[j] > a[j-1]){//那就取 mindp[i][j] = min(dp[i][j], dp[i][j - 1]);}//枚举可以从哪个点拼接过来for (int k = 0; k < j; k++){//如果可以拼接,那么合并完后区间内的数就都要被操作if (a[j] > a[k]){//跳跃的奉献就是区间内的数的个数,即 j - k - 1,然后取mindp[i][j] = min(dp[i - 1][k] + j - k - 1, dp[i][j]);}}}cout << dp[i][n + 1] << " ";}cout << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

http://www.dtcms.com/wzjs/59157.html

相关文章:

  • 承德网站制作公司搜索网站排行
  • 企业网站建设资金预算表网络排名优化软件
  • 毕业设计开题报告网站开发武汉seo服务
  • 南京那些公司做网站网络推广和网络销售的区别
  • 浙江王氏生态建设网站百度网盘服务电话6988
  • 做微商网站设计百度搜索高级搜索
  • wordpress付费主题分享郑州整站网站优化
  • 潍坊做网站公司最佳磁力搜索引擎
  • 做农药的网站海外广告优化师
  • 网站打不开服务器错误广州推广系统
  • 180天做180个网站推广游戏赚钱的平台有哪些
  • 网站设计图尺寸做seo推广一年大概的费用
  • 南岗区城市管理与建设网站百度地图推广怎么收费标准
  • 网站建设怎么做分录营销的三个基本概念是什么
  • 网站seo多少钱360信息流广告平台
  • php 网站开发框架apseo服务 收费
  • 跨境电子商务网页制作与网站建设站群优化公司
  • 网站做su什么意思青岛网络优化费用
  • 桂林网丫网业管理有限公司百度搜索优化建议
  • 网站做担保交易 是否资质怎么提高关键词搜索权重
  • 网站安全管理机制建设上海企业优化
  • 网站站内结构优化关于seo如何优化
  • 南宁网站优化公司哪家好seo查询友情链接
  • 企业网站建设的目的有()站内推广和站外推广的区别
  • 网站做的和别人一样违法吗以营销推广为主题的方案
  • c 如何快速做动态网站免费好用的网站
  • 什么做网站的公司好免费网络推广的方法
  • 交警网站建设整改百度下载软件
  • 网站建设中怎么解决百度推广哪家做的最好
  • 公司网站建设维护网络推广好做吗?