AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

一些模板(自用)

作者: 作者的头像   想上岸9099 ,  2022-01-09 21:56:07 ,  所有人可见 ,  阅读 221


2


1

1.最长公共子序列

for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    {
        f[i][j]=max(f[i-1][j],f[i][j-1]);  //不包含a[i]包含b[j] 和包含a[i]不包含b[j]取最大值
        if(a[i]==b[j])f[i][j]=max(f[i][j],f[i-1][j-1]+1);//当前和(不包含a[i]不包含b[j])+1 取最大值
    }
    cout<<f[n][m];

2.最长上升子序列

for(int i=1;i<=n;i++)
    {
        h[i]=1;
        for(int j=1;j<i;j++)
        if(a[i]>a[j])
        h[i]=max(h[i],h[j]+1);

        ans=max(ans,h[i]);
    }
    cout<<ans;

3.01背包

for(int i=1;i<=n;i++)
    for(int j=0;j<=m;j++)
    {
        f[i][j]=f[i-1][j];
        if(j>=v[i])f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);
    }
//空间优化
for(int i=1;i<=n;i++)
    for(int j=m;j>=v[i];j--)
    {
        f[j]=max(f[j],f[j-v[i]]+w[i]);
    }

完全背包

for(int i=1;i<=n;i++)
    for(int j=0;j<=m;j++)
    {
        f[i][j]=f[i-1][j];
        if(j>=v[i])f[i][j]=max(f[i][j],f[i][j-v[i]]+w[i]);
    }
//优化
for(int i=1;i<=n;i++)
    for(int j=v[i];j<=m;j++)
        f[j]=max(f[j],f[j-v[i]]+w[i]);

多重背包

for(int i=1;i<=n;i++)
    for(int j=0;j<=m;j++)
    for(int k=0;k<=s[i]&&v[i]*k<=j;k++)
    f[i][j]=max(f[i][j],f[i-1][j-k*v[i]]+k*w[i]);

多重背包优化

    int cnt=0;
    for(int i=1;i<=n;i++)
    {
        int a,b,s;
        cin>>a>>b>>s;
        int k=1;
        while(k<=s)
        {
            cnt++;
            v[cnt]=a*k,w[cnt]=b*k;
            s-=k;
            k*=2;
        }
        if(s>0)
        {
            cnt++;
            v[cnt]=s*a,w[cnt]=s*b;
        }
    }
    n=cnt;
    for(int i=1;i<=n;i++)
    for(int j=m;j>=v[i];j--)
    f[j]=max(f[j],f[j-v[i]]+w[i]);

分组背包

 for(int i=1;i<=n;i++)
        for(int j=m;j>=0;j--)
            for(int k=0;k<s[i];k++)   //s[i]是每组物品数
            if(j>=v[i][k])
            f[j]=max(f[j],f[j-v[i][k]]+w[i][k]);

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息