集训笔记0302

 

作业题 lgP2758以及pro版本

设A和B是两个字符串。我们要用最少的字 符操作次数,将字符串A转换为字符串B。 这里所说的字符操作共有三种:
• 1、删除一个字符;
• 2、插入一个字符;
• 3、将一个字符改为另一个字符;
• !皆为小写字母!


表面看起来似乎是字符串的题,我也确实按字符串的思路想了很久,后来发现,这题居然是个dp!
不详细写了,据说看代码就行

 void dp()
{
    for(int i=1;i<=lena;i++)
        f[i][0]=i;
    for(int i=1;i<=lenb;i++)
        f[0][i]=i;
    for(int i=1;i<=lena;i++)
        for(int j=1;j<=lenb;j++)
        {
            if(a[i-1]==b[j-1])
            {
                f[i][j]=f[i-1][j-1];
                continue;
            }
            f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1])+1;
        }
}

PRO版:
https://nanti.jisuanke.com/t/43511
• 给两个由a~z和0~9组成的字符串,你可以 对任意一个字符串做如下操作:
• 在一个地方插入一个字母
• 删除一个字母
• 删除一个数字k,然后在此处插入k个字母
• 问最少几步使得两个字符串相同且没有数 字存在?
• 第一个字符串长10000,第二个长1000, 数字最多100个


这道题与前面唯一的区别就是多了一些数字需要处理,我们发现,最后要求输出的结果里都是没有数字的,全部需要转化为字母,而每一个数字都可以转化为相应个数的任意字母,于是把其换位通配符再dp即可;


 

EXCRT 扩展中国剩余定理

洛谷有模板,讲的也很详细,照着推就好了;

lgP4777模板:

    给定n组非负整数,,求解关于x的方程组的最小非负整数解。
 

 

 


• 让我们来改变一下格式:
• x+y1a1=b1①
• x-y2a2=b2②
• x-y3a3=b3③
• …
• ①②相减得:
• y1a1+y2a2=b1-b2
• 用exgcd求解,不能解就无解。
• 然后我们可以解出一个最小正整数y1,带 入①得到x其中一个解:
• x0=b1-y1a1
• 它的全解为x=x0+k*lcm(a1,a2)(由y1的全解可导)
• 即x=x0(mod lcm(a1,a2))
则:
• x+y3*lcm(a1,a2)=x0④
• ③④再联立,重复以上过程即可。
显然成立orz;


 

逆元

https://www.cnblogs.com/kongbursi-2292702937/p/10582258.html
写的挺好,看看就差不多了orz(bu
待补;


 

错排问题

• lgP1595 信封问题
• 某人写了n封信和n个信封,如果所有的信 都装错了信封。求所有信都装错信封共有 多少种不同情况
我们令f[n]表示n封信错排的答案为多少,思 考一下f[n]的递推式是什么?
近似与whh巨佬的思路:

  首先我们认为前(n-1)个信封都为错排的,则方案数为f(n-1),而第n封信装在第n个信封里,于是随意与(n-1)个信封里的信互换均成立,而对于(n-1)的每一种错排方案,我们都可以把第n号信与(n-1)中的每一个互换,则方案数为(n-1)*f(n-1);




  而我们继续想,这是前(n-1)封信全部错排的情况,还有没有别的情况,可以使n封信错排呢?显然有,那就是,第i封信装在第i个信封里,第n封信装在第n个信封里,二者互换,也满足要求;那么不难发现,此时需要前(n-2)封信错排,且i共有(n-1)种取值可能,从1☞(n-1);而每一种可能种都有f(n-2)种错排,则方案数为(n-1)*f(n-2);还有其他可能么?没了; 

于是递推式子为f(n)=(n-1)*f(n-1)+(n-1)*f(n-2); 正确性显然;

原文地址:https://www.cnblogs.com/ziyuan122625/p/12400778.html