栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

[Acwing] 900. 整数划分 计数DP

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[Acwing] 900. 整数划分 计数DP

前言

计数dp 有点想 背包问题啊

思路

做过 记搜 的题 可以说 一模一样

状态表示:
f [i][j] 表示从前 i 个整数 选出 恰好和为 j 的方案

状态转移 :

如果当前小于 i 那么 可以由上一层 f[i - 1][j] 推导过来

否则 即 f [ i ] = f [ i − 1 ] [ j ] + f [ i ] [ j − i ] ) f[i]=f[i-1][j] + f[i][j-i]) f[i]=f[i−1][j]+f[i][j−i])

这不就是背包的推导吗

CODE

#include 
using namespace std;
const int N  = 1e3+10, mod  =1e9+7;
int f[N][N],n;


void solve()
{
    cin>>n;
    for(int i= 0 ;i<=n;i++)
    f[i][0] = 1;

    for(int i=1;i<=n;i++)
    {
        for(int j = 0 ;j<=n;j++)
        {
            f[i][j] = f[i-1][j]%mod;

            if(j>=i)
                f[i][j] = (f[i-1][j]+f[i][j-i])%mod;
        }
    }
    cout<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302530.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号