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

Dice Combinations(Dynamic Programming)

题目描述

Your task is to count the number of ways to construct sum n by throwing a dice one or more times. Each throw produces an outcome between 1 and  6.
For example, if n=3, there are 4 ways:
1+1+1
1+2
2+1
3

输入

The only input line has an integer n.
Constraints
1 ≤ n ≤ 10^6

输出

Print the number of ways modulo 10^9+7.

样例输入 
3
样例输出
4
思路分析

动态规划,类似于爬楼梯。

n012345678
dp[n]11248163263125

每次掷骰子,可以得到1~6中任意一个数字,所以状态转移方程为:dp[n]=dp[n-1]+dp[n-2]+dp[n-3]+dp[n-4]+dp[n-5]+dp[n-6]。其中n-i<0时,dp[n-i]=0;dp[0]=1。

假设我们现在正在爬楼梯,一个六面骰子掷到哪个数,就爬几个台阶。想要到达第八层台阶,可以在第2层台阶掷出数字6,也可以在第3层台阶掷出数字5,在第4层台阶掷出数字4,在第5层台阶掷出数字3,在第6层台阶掷出数字2,可以在第7层台阶掷出数字1。这样看来,一共有六种方法可以实现到达第八层台阶,即dp[8]=dp[7]+dp[6]+dp[5]+dp[4]+dp[3]+dp[2]。

代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e9+7;
ll n;
int main(){cin>>n;vector<ll>dp(n+1,0);dp[0]=1;for(ll i=1;i<=n;i++){for(int j=1;j<=6;j++){if(i-j>=0){dp[i]=(dp[i]+dp[i-j])%mod;}}}cout<<dp[n];return 0;
}

http://www.dtcms.com/a/312005.html

相关文章:

  • 【Bug记录】关于copy的表不能copy主键和index的解决办法
  • python:以支持向量机(SVM)为例,通过调整正则化参数C和核函数类型来控制欠拟合和过拟合
  • SM2椭圆曲线密码算法原理与纯C语言实现详解
  • #Linux内存管理# 用一个案例详细介绍ARMv7-A架构 缺页中断处理的原理
  • ARMv8/v9架构FAR_EL3寄存器介绍
  • imx6ull-驱动开发篇6——Linux 设备树语法
  • P10816 [EC Final 2020] Namomo Subsequence|普及+
  • 堆----1.数组中的第K个最大元素
  • [buuctf-misc]喵喵喵
  • Linux学习--数据结构
  • 前端-移动Web-day3
  • 基于springboot的郑州旅游景点推荐系统
  • Kotlin单例模式懒汉模式:LazyThreadSafetyMode.SYNCHRONIZED(2)
  • 多线程(二) ~ 线程核心属性与状态
  • C#中对于List的多种排序方式
  • LeeCode 88. 合并两个有序数组
  • DeepSpeed - 超大LLM分布式训练框架 ZeRO技术
  • Python day32
  • 力扣 二叉树遍历 中序/前序/后序(递归和迭代版)
  • dbt中多源数据的处理
  • 混合嵌入与置信度增强:新一代RAG技术如何提升LLM性能
  • 1.6 vue 监听
  • JavaScript 原始值与引用值
  • SQL语言学习(group by,having)
  • PyTorch 中 Tensor 统计学函数及相关概念
  • 基于单片机一氧化碳CO检测/煤气防中毒检测报警系统
  • OneCode 3.0智能分页拦截器深度解析:从拦截机制到性能优化
  • 轨道追逃博弈仿真
  • 输电线路建模与电力负荷特性详解(含等值模型与曲线分析)
  • Vue 详情模块 4