首页 > 其他分享 >CF888D Almost Identity Permutations 题解

CF888D Almost Identity Permutations 题解

时间:2023-03-10 23:11:46浏览次数:48  
标签:Almost 题解 Permutations int dp 转移 Identity

CF链接:Almost Identity Permutations

Luogu链接:Almost Identity Permutations

$ {\scr \color {Aquamarine}{\text{Solution}}} $

前言

这好像是一道能用数学秒掉的题目

但由于我喜欢DP过菜,我们用DP来解决这个问题

分析

$ dp[i][j] $ 表示在 $ i $ 个数里有 $ j $ 个数位置满足 $ a[i]==i $

答案很简单,就是$\sum_{i=n-k}^{n} dp[n][i]$

接下来考虑状态如何转移

$ dp[i][j] $ 可以由 $ dp[i-1][j],dp[i-1][j-1],dp[i-1][j+1] $ 转移而来

  • 从 $ dp[i−1][j−1] $ 转移,我们可以直接把新增的数放到增加的位置上去就可以了;
  • 从 $ dp[i−1][j] $ 转移,新增的数不能放到自己的位置上,且必须要和$ i-1-j $个其他的数字交换位置;
  • 从 $ dp[i-1][j+1] $转移,那么新增的数字和原先在自己位置上的数字(j+1种)可以进行交换(因为现在多了一个,所以要减少一个);

边界也要稍稍注意一下

$ j=0 $时,并没有$ dp[i-1][j-1]$

同理,$ i=j $时,直接为$ 1 $

诶,做完了

Code:

//From:201929
#include<bits/stdc++.h>
#define L long long
using namespace std;
L dp[1005][1005];
int main()
{
    int n,k;
    scanf("%d%d",&n,&k);
    dp[4][4]=1,dp[4][3]=0,dp[4][2]=6,dp[4][1]=8,dp[4][0]=9;
    for(int i=5;i<=n;i++)
    for(int j=0;j<=i;j++)
    if(j==0) dp[i][j]=(i-1)*dp[i-1][j]+dp[i-1][1];
    else if(j==i) dp[i][j]=1;
    else dp[i][j]=dp[i-1][j-1]+(i-1-j)*dp[i-1][j]+(j+1)*dp[i-1][j+1];
    L ans=0;
    for(int i=n-k;i<=n;i++) ans+=dp[n][i];
    printf("%lld",ans);
    return 0;
}

 

标签:Almost,题解,Permutations,int,dp,转移,Identity
From: https://www.cnblogs.com/201929-whx/p/17088786.html

相关文章

  • 「THUPC 2023 初赛」欺诈游戏 题解
    写点无脑做法。设走私者的策略是\(p_i\)概率选\(i\),检查官的策略是\(q_i\)概率选\(i\)。因为两者策略均最优,所以走私者选任意一个数得到的期望收益相同,检查官选任......
  • CF1802D题解
    CF1802D题解传送门更好的阅读体验简化题意:有n个商店,每个商店卖a,b两种商品,价格分别为\(a_i,b_i\),你需要在每个商店买一个商品,并且不能在所有商店都买同一种商品,最......
  • Python - Crypto 导入失败问题解决记录
    python3.7Mac安装psycopg2$pipinstallpsycopg2...Error:pg_configexecutablenotfound....出现报错:Error:pg_configexecutablenotfound.解决参考:h......
  • P5752 [NOI1999] 棋盘分割题解
    本文来自我的洛谷博客。本题解力求使用清晰易懂的图片和文字,讲解最简洁的道理。请大家耐心地看完,注意要结合图片一起哦~~2022-8-24更改了格式与错别字2022-8-28更改......
  • python工具jupyternotebook页面打开空白问题解决方法
    jupyternotebook页面打开空白问题解决方法下载anaconda自带的jupyternotebook找到这个配置文件C:\Users\Administrator.jupyter\jupyter_notebook_config.py打开找......
  • P7712 [Ynoi2077] hlcpq 题解
    虚式优化建图题。首先有一个很显然的暴力,对于两条相交的线段连一条边,然后跑割点。这个暴力的问题在于边与点的时间复杂度相差过大,无论是空间还是时间都无法承受,所以可以......
  • CF1713F 题解
    题意传送门给出一个从\(1\)到\(n\)的数组\(a\),有一个从\(0\)开始标号的大小为\((n+1)\times(n+1)\)的矩阵\(b\),通过以下方式生成:对于\(0\lei\len\),\(b_{i......
  • 江南信息学2023第三周练习20230310 题解
    比赛链接1001:三个数的最大值条件判断,如判断a最大就是a>=b&&a>=c,以此类推1002:星期几取余,n%7结果是0则是周一,是1则周二,以此类推1003:奇偶分家设两个求和变量sum1,sum2......
  • ABC292F题解
    首先先钦定\(a\leb\),否则交换一下就行。方法1:二分答案。容易发现,答案至少为\(a\),并且用左下角为一个顶点一定不会更劣,并且另外两个点一定都在线段上(否则可以调整)。我们......
  • CF207C3 Game with Two Trees 题解
    脑子不够,科技来凑。不过好像也没有用多么高级的科技……首先这个题目很坏,它让你翻转\(S_{t_2}\)。即从\(t_2\)某个节点往下走到另一个节点的路径所表示的字符串。这个......