博客总结

Posted 钟钟终

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了博客总结相关的知识,希望对你有一定的参考价值。

还是先反思一下最近的学习状态。真的懈怠了很多,我总是想去完成制定的计划,但执行起来往往总是力不从心,心思没办法集中。开始以为要做的事情太多,不知道从哪里下手引发的迷茫,之后便越来越懒惰,每天背单词、学ACM的时间都没法保证,真的让我十分担忧。
不能总这样下去,我还有目标没有实现,不单单是ACM,无论哪件事都需要自己全力以赴二点去做,不要去小看别人付出的执着和努力。我能做的只是更加执着,更加努力。最后,劝勉自己一段话:勤奋到疯狂,孤独到兴奋,好胜到桀骜。


本周学习内容:
1.鸽巢定理、扩展欧拉定理
2.杨辉三角形和二项式系数
3.容斥原理
4.Fibonacci数列
5.一些洛谷题和 div3 D,E两题总结


鸽巢定理

本质就是排列组合问题。学好概率论写这类题目,就很easy了,不多说明。

hdu 1205"吃糖果问题"
隔板法解决:一个基本的组合问题。找出种类数量最多的糖果数,数量N看成n个隔板,其他种类的糖果数和记为S。隔板可放第一个、最后一个都可以放。因此,如果n-1>s,则说明隔板太多,代表隔板这类的糖果肯定会重复放,肯定不成立;而n-1<=s,由于隔板种类的糖果数量最多,因此一个隔板内的糖果可为不同类,满足条件。

欧拉定理:φ(n) 表示小于等于 n 的正整数中与 nn 互质的数的个数(欧拉函数)。

a 与 m 互质时,a 的φ(m)次放方 ≡ 1 mod m

扩展欧拉定理:无需 a,m互质。

b≥φ(m)时,   a的b次方 ≡ a的(b mod(φ(m))(m))次方 mod m

杨辉三角形和二项式系数

杨辉三角是二项式系数的典型应用。本质是(1+x)的n次方前的系数。将复杂度降为O(1),由于要用到 n!,而且30的阶乘便已经超过了long long的范围。相邻两项相除,得到公式 (n-k+1)/k

补充一些数论知识:

#include <bits/stdc++.h>

using namespace std;
const int mod=10007;
const int N=1005;
typedef long long ll;
int c[N][N];
int go(int a,int b)  //快速幂
{
    int res=1;
    while(b)
    {
        if(b&1) res=(res*a)%mod;
        a=(a*a)%mod;
        b>>=1;
    }
    return res%mod;
}
int dfs(int n,int m)  //递归求解c(n,m)
{
    if(m==0) return c[n][m]=1;
    if(m==1) return c[n][m]=n;
    if(n-m<m) m=n-m; //降低复杂度
    return c[n][m]=(dfs(n,m-1)+dfs(n-1,m-1))%mod;
}
int main()
{
    int a,b,k,n,m;
    cin>>a>>b>>k>>n>>m;
    a%=mod;b%=mod;
    int ans=1;
    ans=(go(a,n)%mod)*(go(b,m)%mod);
    if(n>m) n=m;
    c[1][0]=1;c[1][1]=1;
    ans*=dfs(k,n)%mod;
    ans%=mod;
    printf("%d",ans);
    return 0;
}

容斥定理

简单的一句话:现将所有对象的数目计算出来,然后减去重复计算的部分。
P1020 导弹拦截
(还存在一点问题,我再想想吧)

#include <bits/stdc++.h>

using namespace std;
int a[100005];
int dp[100005];
int h[100005];
int main()
{
    int g=1;
    while(cin>>a[g]) g++;
    g--;
    //利用dp找一个最长下降子序列
    for(int i=1;i<=g;i++)
    {
        dp[i]=1;
        for(int j=1;j<i;j++)
        {
            if(a[i]<=a[j])
                dp[i]=max(dp[i],dp[j]+1);
        }
    }
    int ans=0,max1;
    for(int i=1;i<=g;i++)
        ans=max(ans,dp[i]);
    cout<<ans<<endl;
    //利用贪心最少需要几套系统
    h[1]=a[1];
    int k=1,min1,b;
    for(int i=1;i<=g;i++)
        max1=max(max1,a[i]);
    for(int i=2;i<=g;i++)
    {
        min1=max1;
        for(int j=1;j<=k;j++)
        if(h[j]>=a[i]&&h[j]<=min1)
        {
            min1=h[j];
            b=j;
        }
        if(min1==max1)
            h[++k]=a[i];
        else h[b]=a[i];
    }
    cout<<k<<endl;
    return 0;
}

以上是关于博客总结的主要内容,如果未能解决你的问题,请参考以下文章

python常用代码片段总结

BootStrap有用代码片段(持续总结)

Wordpress阻止访问wp admin€“wpsnipp.com网站你博客的Wordpress代码片段

BootStrap实用代码片段(持续总结)

查看发票组代码后的总结和有感

(转)博客园登陆__JSEncrypt 分析