题目链接:Problem - D - Codeforces

一道非常经典的完全背包求方案数题;

首先先写好我们的状态转移方程,那什么代表体积,什么代表物品数目呢;

其实很清晰k, k + 1 ... k+ n - 1 表示n个物品

m就是表示体积

这个就是完全背包问题之恰好体积为n的所有组合数

所以我们的状态表达式可以定义f[i][j] 前i个物品体积为j的所有方案数

状态转移方程:

f[i][j] = f[i - 1][j - i] + f[i - 1][j - 2 * i] + ... f[i - 1][j - n * i]

推理可知

f[i][j-i] = f[i - 1][j - 2 * i] + ... f[i - 1][j - n * i]

所以

f[i][j] = f[i - 1][j - i] + f[i][j - i]

由等比公式可知物品的数量最大为 (1 + n) * n / 2 = m //  m 表示长度

所以时间复杂度为o(nm)

#include <iostream>
#include <cmath>
using namespace std;const int mod = 998244353;int add(int x, int y)
{return (x + y > mod ? x + y - mod : x + y);
}void solve() {int n,k;cin>>n>>k;int f[200010] = {0}, g[200010] = {0}, dp[200010] = {0};// f 表示 f[i - 1][j - i] 的方案数// g 表示 f[i][j - i] 的方案数// dp 表示总方案数f[0] = 1; // 根据完全背包定义可知,将体积为0的赋值为1int m = sqrt(n / 2) + 10;for(int i = k; i <= k + m; i ++ ){for(int j = i; j <= n; j ++ ){g[j] = add(f[j - i], g[j - i]);dp[j] = add(dp[j], g[j]);}for(int l = 0; l <= n; l ++ ) f[l] = g[l], g[l] = 0;}for(int i = 1; i <= n; i ++ ) cout<<dp[i]<<" ";cout<<'\n';
}int main() {solve();return 0;
}

Educational Codeforces Round 133 (Rated for Div. 2) D题相关推荐

  1. Educational Codeforces Round 133 (Rated for Div. 2)(CD题解)

    Educational Codeforces Round 133 (Rated for Div. 2)CD题解 过AB补CD C. Robot in a Hallway 题意 题意:现有 2∗m 的方 ...

  2. Educational Codeforces Round 133 (Rated for Div. 2) 题解 CD

    D: 这是一道好dp(对我来说) 我做的时候有想过正解那个方式当考虑到可能有重复就没有深入思考了 假设dp[i][j]代表第i次j的方案数 此时我们可以发现dp[i][j]=sum(dp[i-1][j ...

  3. Educational Codeforces Round 103 (Rated for Div. 2)前四题

    Educational Codeforces Round 103 (Rated for Div. 2) 第二次被别人hack,悲 A - K-divisible Sum 题意 给定两个整数 n,kn, ...

  4. Educational Codeforces Round 133 (Rated for Div. 2)

    本来也没啥的这A题也不改花多久时间 大家都在用暴力我来给出O(1)的解法 确实不容易写出这的时候已经崩溃了放上一张图片共参考 说我菜吧确实- 呃..... 再讲解也下吧: 题目就是在一个数轴上有一个小 ...

  5. C. Robot in a Hallway Educational Codeforces Round 133 (Rated for Div. 2)dp

    dp问题 There is a grid, consisting of 22 rows and mm columns. The rows are numbered from 11 to 22 from ...

  6. 【细节很多的dp】Educational Codeforces Round 133 (Rated for Div. 2) C. Robot in a Hallway

    参考题解 题意: 有一个 2 2 2 行, m m m 列的方格,初始在 ( 1 , 1 ) (1,1) (1,1),每个格子有一个开放时间,开放时间后才能到达,每个格子只能被到达一次,你可以任意选择 ...

  7. Educational Codeforces Round 100 (Rated for Div. 2)补题记录

    总结:感觉这个educational场好难啊(蒟蒻视角),又被虐了,唉 A. Dungeon 每一枪会造成1点伤害对一个单位,但是当开7的倍数枪时会造成3点伤害 每7次一个轮回,一个完整的轮回共造成9 ...

  8. codeforces Educational Codeforces Round 49 (Rated for Div. 2) C题

    刚开始拿到这题很懵逼,知道了别人的思路之后开始写,但是还是遇到很多坑,要求求P2/S最大.p=a b.就是求(a2+ b2 +2ab)/ab最大,也就是a/b +b/a最大.那么题意就很明显了. 但是 ...

  9. Educational Codeforces Round 119 (Rated for Div. 2) 做题日志

    A Equal or Not Equal 题意 给你一个字符串, s i = = E si == E si==E表示 a ( i ) = = a ( i + 1 ) a(i) == a(i+1) a( ...

最新文章

  1. 推荐一本DD刚撸完的书,顺便送一波!
  2. 抄表 软件_云抄表小区智能电表远程抄表软件
  3. python getattr_来一点Python面向对象第一级进阶的东西
  4. 数据结构五——二叉树
  5. Window中显示文件扩展名
  6. GNU C 与 ANSI C(下)
  7. matlab 柏林噪声,游戏AI怎么写(一)——高级随机技术
  8. Delphi中CoInitialize之探究
  9. Java Eclipse下载安装教程
  10. 红帽子linux9百度云,linux安装--红帽子Linux REDHAT 9.0 ISO(3CD)
  11. UE4 编辑器模块引用,不影响打包处理
  12. xss.haozi.me练习通关
  13. 华为超级技术大牛的十年经验总结
  14. 计算机网络没有接收什么情况,电脑网络连接失败 网卡只有发送没有接收该怎么办?...
  15. android换肤动画,Android换肤(二) — 插件式换肤
  16. JAVA计算机毕业设计东理咨询交流论坛计算机(附源码、数据库)
  17. JavaFx的ScrollPane的面板以及滚动条的css的自定义化
  18. 淘宝开源代码检测工具!(附源码)
  19. 分布式数据库实战第五节 保证分布式系统中的数据库可靠
  20. 手机蓝牙连不上jimu机器人_手机和蓝牙接收器配对不成功的常见问题和解决方案...

热门文章

  1. matlab 矿相分析,相平面分析matlab程序
  2. java excel转pdf linux,从JAVA直接读取EXCEL、WORD并生成PDF文件
  3. JavaWeb项目使用BlazeDS整合Flex进行RemoteObject数据交互
  4. 策略验证_指标买点分析技法_运用BIAS乖离率指标选择买点
  5. 示波器和万用表测量直流电压的区别
  6. 对打造执行力强的开发团队的思考和探索 -- 组建团队
  7. bigmap 绘制三维地形图_MAX真实三维地形图的制作,bigemap和global mapper软件使用
  8. [精易软件开发工程师Leo学习笔记]009组件-窗口
  9. 银行存款 java_银行存款高级系列Java
  10. Winform 通用遮罩层