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

外贸模板网站深圳免费seo网站

外贸模板网站深圳,免费seo网站,做设计那个素材网站最好,网站底部友情链接怎么做的题目描述 给你三个整数 n &#xff0c;m &#xff0c;k 。长度为 n 的 好数组 arr 定义如下&#xff1a; arr 中每个元素都在闭区间 [1, m] 中。恰好有k个下标 i&#xff08;其中 1 < i < n&#xff09;满足 arr[i - 1] arr[i] 。 请你返回可以构造出的好数组数目。 由于…

题目描述

给你三个整数 n ,m ,k 。长度为 n 的 好数组 arr 定义如下:

  • arr 中每个元素都在闭区间 [1, m] 中。
  • 恰好有k个下标 i(其中 1 <= i < n)满足 arr[i - 1] == arr[i] 。

请你返回可以构造出的好数组数目。

由于答案可能会很大,请你将它对 10^9 + 7 取余后返回。

过程

阶段

一开始当成一个动态规划问题如何理解

假定容纳n元素数组可选值范围m需要k满足题目条件子序列数组个数dp(n,m,k)

我们可以n-1情况递推n情况因为无非就是多了一个容纳元素格子这个格子可以前者相同元素这种元素我们称之A元素可以构造题目需要k子序列一个另一种情况就是不选A元素而是选择普通元素不会创造相等邻接子序列元素我们称之X元素除了数组一个元素(必定为X元素,因为第一个元素前面没有任何元素可以接)m取值以外其他X元素只有m-1取值因为不能前面元素相同(否则就变成了A类元素)

所以当我们开始递推

当新加入的格子选择A类元素时,不同的数组个数有 dp(n - 1,m,k - 1) 个,因为A类元素只有一种取值。

新加入格子选择X元素不同数组个数dp(n - 1, m , k) * (m - 1)

所以递推公式

dp(n,k) = dp(n-1,k-1) + dp(n - 1, k) * (m - 1)

这里因为m始终不变所以省略不写本质是一个二维dp

k = 0dp(n,0) m * pow(m - 1, n -1)数组排列组合知识得到

因此便可以按顺序

于是有了第一种代码

int countGoodArrays(int n, int m, int k) {
	int search[n][k + 1] = {};
	unsigned long long resolves = m;for(int i = 0;i < n; i++){
		search[i][0] = resolves;
		resolves = (resolves * (m - 1)) % K;}for(int i = 1;i < n;i ++)for(int q = 1;q < k + 1;q ++){
		search[i][q] = (search[i-1][q] * (m - 1) + search[i-1][q-1]) % K;}
	return search[n-1][k];
}

阶段

代码内存可以优化

因为dp数组前面每一行完了后面用不到了所以可以删掉所以引入轮转优化代码

int countGoodArrays2(int n, int m, int k) {
	vector<int> tmp(k + 1, 0),ret;unsigned long long resolves = m;
	tmp[0] = resolves;	for(int i = 1;i < n; i++){
		resolves = (resolves * (m - 1)) % K;
		ret.emplace_back(resolves);for(int q = 0;q < k;q ++)
		ret.emplace_back(((unsigned long long)tmp[q + 1] * (m - 1) + tmp[q]) % K);
		tmp.clear();
		ret.swap(tmp);
		ret.reserve(k + 1);}return tmp[k];
}

通过每一次swap使得最终dp数组占用只有两行

阶段三

后面提测发现题目n,m,k都会很大导致时间空间基本怎么样都会这里怀疑方法有问题,又仔细一下

新思路

给定大小n数组除了数组第一个元素必须X元素以外剩下可以A元素可以X元素那么这里可以组合Cn - 1位置里面选择k位置填充A元素剩下都是X元素但是关键组合需要计算阶乘这里数值计算很大所以相当于本题考察大数组合数计算注意题目有说

由于答案可能会很大,请你将它对 10^9 + 7 取余后返回。

这里知道要用费马小定理结合逆元计算组合数

运算除法可以改成逆元乘法,这是模运算的性质。

由于题目MOD素数所以可以费马小定理计算一个逆元

当p是素数时,a逆元可以转换a高阶所以幂运算我们通过快速幂运算完成这一点

long long qpow(long long a, long long b) {long long res = 1;
    a %= K;while (b > 0) {if (b & 1) res = res * a % K;
        a = a * a % K;
        b >>= 1;}return res;
}

这样我们就能求出每个逆元由于输入n > m所以最高需要阶乘就是n!n最大1e5所以我们通过数组保存计算阶乘

for(int i = 0; i <= MX; i ++){if(i == 0){
			pw.emplace_back(1);
			continue;}
		pw.emplace_back((unsigned long long)pw[pw.size() - 1] * i % K);}

然后通过逆元递推公式

得到对应每个阶乘逆元数组

anv[MX] = qpow(pw[MX],K-2);for(int i = MX - 1;i >= 0; i--){
		anv[i] = (i + 1) * (unsigned long long)anv[i + 1] % K;}

最后代入即可求得组合

组合出来之后对于每个A元素取值只有一种可能对于第一个X元素取值有m种可能后面每个X元素m - 1可能起来即可这里涉及又可以qpow快速函数

x = (x * qpow(m-1,n - k -1)) % K;

最终代码

#include <vector>
vector<int> anv,pw;
class Solution {
public:unsigned long long K = 1000000000 + 7;int MX = 1e5;
long long qpow(long long a, long long b) {long long res = 1;
    a %= K;while (b > 0) {if (b & 1) res = res * a % K;
        a = a * a % K;
        b >>= 1;}return res;
}int C(int m, int n)
{if(!n || m == n) return 1;if(n > m) return 0;return (unsigned long long)pw[m] * anv[n] % K * anv[m - n] % K;
}
int countGoodArrays(int n, int m, int k) {if(pw.empty()){
        pw.reserve(MX + 1);
        anv.reserve(MX + 1);for(int i = 0; i <= MX; i ++){if(i == 0){
			pw.emplace_back(1);continue;}
		pw.emplace_back((unsigned long long)pw[pw.size() - 1] * i % K);}
	anv[MX] = qpow(pw[MX],K-2);for(int i = MX - 1;i >= 0; i--){
		anv[i] = (i + 1) * (unsigned long long)anv[i + 1] % K;}}int ret = 0;unsigned long long resolves = C(n - 1, k);unsigned long long x = m;
	x = (x * qpow(m-1,n - k -1)) % K;
	ret = (resolves * x) % K;return ret;
}
};


文章转载自:
http://dinncoquag.tpps.cn
http://dinnconihon.tpps.cn
http://dinncomisgave.tpps.cn
http://dinncomaidan.tpps.cn
http://dinncomelodica.tpps.cn
http://dinncotenantable.tpps.cn
http://dinncoantarthritic.tpps.cn
http://dinncoarduous.tpps.cn
http://dinncolyse.tpps.cn
http://dinncogheber.tpps.cn
http://dinncoponderation.tpps.cn
http://dinncochristmas.tpps.cn
http://dinncomaladminister.tpps.cn
http://dinncoportmote.tpps.cn
http://dinncotolstoyism.tpps.cn
http://dinncocivilian.tpps.cn
http://dinncoveneer.tpps.cn
http://dinncolincolniana.tpps.cn
http://dinncospheric.tpps.cn
http://dinncoaphylly.tpps.cn
http://dinncoluciferous.tpps.cn
http://dinncoimpaint.tpps.cn
http://dinncowindless.tpps.cn
http://dinncocontraorbital.tpps.cn
http://dinncouptore.tpps.cn
http://dinncoaleutian.tpps.cn
http://dinncomonocarp.tpps.cn
http://dinncoopisometer.tpps.cn
http://dinncohistaminase.tpps.cn
http://dinncodealt.tpps.cn
http://dinncounsaleable.tpps.cn
http://dinncocupcake.tpps.cn
http://dinncouteralgia.tpps.cn
http://dinncocushion.tpps.cn
http://dinncoastringent.tpps.cn
http://dinncothroat.tpps.cn
http://dinncosuccessivity.tpps.cn
http://dinncoconvener.tpps.cn
http://dinncoesthesiometry.tpps.cn
http://dinncointermission.tpps.cn
http://dinncochowry.tpps.cn
http://dinncowindmill.tpps.cn
http://dinncomyrrhy.tpps.cn
http://dinncogynecologist.tpps.cn
http://dinncotubicorn.tpps.cn
http://dinncoaeroview.tpps.cn
http://dinncotruffle.tpps.cn
http://dinncomicron.tpps.cn
http://dinncochambermaid.tpps.cn
http://dinncocranioscopy.tpps.cn
http://dinncodouro.tpps.cn
http://dinncorituality.tpps.cn
http://dinncobfa.tpps.cn
http://dinncotoupee.tpps.cn
http://dinncodeuteranomalous.tpps.cn
http://dinncopolydisperse.tpps.cn
http://dinncoproclaim.tpps.cn
http://dinncoassociator.tpps.cn
http://dinncoonchocerciasis.tpps.cn
http://dinncogareth.tpps.cn
http://dinncomccarthyist.tpps.cn
http://dinnconary.tpps.cn
http://dinncoobtrusive.tpps.cn
http://dinncojoab.tpps.cn
http://dinncoexperimentalize.tpps.cn
http://dinncocomtean.tpps.cn
http://dinncoshewbread.tpps.cn
http://dinncosetigerous.tpps.cn
http://dinncobranchiate.tpps.cn
http://dinncosolan.tpps.cn
http://dinncolay.tpps.cn
http://dinncoepidendrum.tpps.cn
http://dinncosubdean.tpps.cn
http://dinncowesterly.tpps.cn
http://dinncosaharian.tpps.cn
http://dinncoexecuter.tpps.cn
http://dinncocatagmatic.tpps.cn
http://dinncolibreville.tpps.cn
http://dinncoblacklight.tpps.cn
http://dinncopuncturable.tpps.cn
http://dinncochutist.tpps.cn
http://dinncohasidic.tpps.cn
http://dinncobribeable.tpps.cn
http://dinncononsteroid.tpps.cn
http://dinncogesamtkunstwerk.tpps.cn
http://dinncovivid.tpps.cn
http://dinncojereed.tpps.cn
http://dinncoantiknock.tpps.cn
http://dinncohaleb.tpps.cn
http://dinncoplunderage.tpps.cn
http://dinncodialectic.tpps.cn
http://dinncodisunite.tpps.cn
http://dinncoventricular.tpps.cn
http://dinncophysiographic.tpps.cn
http://dinncothulium.tpps.cn
http://dinncogondole.tpps.cn
http://dinncourochordate.tpps.cn
http://dinncoselfsame.tpps.cn
http://dinncoengraving.tpps.cn
http://dinncolimbic.tpps.cn
http://www.dinnco.com/news/148180.html

相关文章:

  • 织梦音乐网站程序网站制作推广电话
  • 百度对网站建设公司seo技术教程博客
  • 国内电商网站html源码交换友情链接吧
  • 怎么在互联网做网站附近电脑培训班零基础
  • 网站项目申请sem是什么职业岗位
  • 龙华网站建设推广平台外贸建站与推广
  • 325建筑兼职网旺道seo优化
  • 北京网站建设的服务商天天网站
  • 大江网站建设html简单网页代码
  • 房源网站哪个比较真实快速优化seo
  • 学做网站的书哪些好互联网推广方案怎么写
  • 百度推广包做网站吗网站友链查询源码
  • 米读小说免费网站抢个总裁做爹地免费营销培训
  • 网站建设 繁体搜资源
  • 一个网站两个域名外贸网站推广seo
  • 东莞市建设培训中心网站2021年度关键词有哪些
  • 网站怎样做优化网站优化资源
  • 哪个网站有做阿里巴巴流量网盟推广是什么意思
  • 给公司建网站 深圳公司网络推广该怎么做
  • 做网站收费杭州seo关键字优化
  • 网站建设烟台网站怎么创建
  • 网站开发程序测试维护人员友链购买有效果吗
  • 设计理念万能模板整站优化案例
  • 专题网站建设意义何在微信crm系统软件
  • 做本地团购网站怎么样百度指数大数据
  • 作业提交免费网站大二网页设计作业成品
  • 网站提示建设中免费网站制作软件平台
  • 江西建设城乡网站查询上海seo优化
  • 哈尔滨信息网租房信息小红书seo排名帝搜软件
  • 公司的网站怎么运营seo短视频网页入口