当前位置: 首页 > news >正文

动态规划:计数类DP

 整数划分:

二维做法:

#include <iostream>using namespace std;const int N = 1e3 + 7, mod = 1e9 + 7;int f[N][N];int main() 
{int n;scanf("%d",&n);//总数为0时,前i个数字全不选也是一种方案,但某个数字不选并不是一种方案//而这里只用把[0][0]初始化,而不是把所有[i][0],因为在下面每次循环到j==0时都会让[i][0]=[i-1][0]=0f[0][0] = 1;for (int i = 1; i <= n; i ++) {for (int j = 0; j <= n; j ++) {   if(j<i)//当前总数小于i个数字,则说明无法再选数字了,方案数就是前几个数字的方案数f[i][j] = f[i - 1][j] % mod; //f[0][0] = 1else//当前总数大于等于i个数字,则说明可以选数字了。//不要i能到总数j的方案数+要i能到总数j-i的方案数==前i个数字能到总数j的方案数f[i][j] = (f[i - 1][j] + f[i][j - i]) % mod;}}printf("%d\n",f[n][n]);return 0;
}

一维做法:

#include <iostream>using namespace std;const int N = 1e3 + 7, mod = 1e9 + 7;int f[N];int main() 
{int n;scanf("%d",&n);f[0] = 1; //总数为0时,前i个数字全不选也是一种方案,但某个数字不选并不是一种方案for (int i = 1; i <= n; i ++)//前i个数字{for (int j = i; j <= n; j ++)//总数为j{   //不要i能到总数j的方案数+要i能到总数j-i的方案数==前i个数字能到总数j的方案数//这里不是二维,所以没法纪录i,但i是递增的且在外循环,所以每次用到的都在前面已经算出来了//例:当前i==4,j==5:f[5]在i==3,j==5时算出来了,也就是不要4能到总数5的方案数//                  f[1]在i==4,j==1时算出来了,也就是  要4能到总数1的方案数f[j]=(f[j] + f[j - i]) % mod;}}printf("%d\n",f[n]);return 0;
}

http://www.lryc.cn/news/215758.html

相关文章:

  • Arcmap制图绘制显著性区域
  • 你一般会什么时候使用CHATGPT?
  • 单例模式下双重校验锁 DCL 的灵魂三问
  • oracle中关于connect by的语法及实现(前序遍历树)
  • 学习笔记二十七:K8S控制器Statefulset入门到企业实战应用
  • JavaScript 的 闭包
  • 二蛋赠书六期:《Linux管理入门经典(第8版)》
  • 19.10 Boost Asio 同步文件传输
  • 微信小程序:两层循环的练习,两层循环显示循环图片大图(大图显示、多层循环)
  • 输入几个数,分别输出其中的奇数和偶数
  • 香港Web3.0:从政策到实践,探索未来发展路径
  • Java程序员面试核心知识--Java基础知识(一)
  • Linux的test测试功能
  • 为什么看了那么多测试技术帖,感觉自己还是菜?
  • HTML和CSS的基础-前端扫盲
  • Flutter 02 基础组件 Container、Text、Image、Icon、ListView
  • [笔记] 字符串输入 #字符输入
  • 服务器数据恢复—EMC存储pool上数据卷被误删的数据恢复案例
  • 记录一次@Slf4j log.info 日志信息未输出到日志文件的问题
  • Git 使用规范流程
  • 69 内网安全-域横向CobaltStrikeSPNRDP
  • GB28181学习(十四)——语音广播与语音对讲
  • Java实验一编程环境使用
  • 【数据结构】——线性表简答题模板
  • lambda和stream
  • go微信开发sdk-简单使用_已设置图床
  • Java判断文本是否有敏感词
  • 【腾讯云 HAI域探秘】基于ChatGLM和StableDiffusion的小学一年级语文教学方案创作实践与经验分享
  • flink状态不能跨算子
  • 基于transformer的解码decode目标检测框架(修改DETR源码)