/*假设我们当前要求的是100以内各位数之和和等于s的数有多少个,可以想到就是10以内各位数之和等于s的数
的个数再加上10到100内的各位数之和等于s的个数。令dp[i][j]就代表10的j次方内各位数之和等于i的数的个
数,那么dp[i][j] = dp[i][j - 1] + (10的j-1次方到10的j次方内各位数之和等于i的数的个数)。那么后边这
一部分怎么求呢?我们可以把j位数拆成j-1位数再加一位,要想让各位数之和等于i,那么加的这一位数只能是
1到9中的任意一个数(不能是0的原因不用说了吧),假设我们加的数是1,那么我们剩下j-1位的和只能是i-1,
也就是dp[i - 1][j - 1],如果加的数是2,那么我们剩下的j-1位的和就是dp[i - 2][j - 1],以此类推,状态
转移方程就出来了,dp[i][j] = dp[i][j - 1] + dp[i - k][j - 1] ( 1 <= k <= 9)
*/
#include <iostream>
#include <cstdio>
using namespace std;
long long dp[90][10];

int main(){
/*    for(int i = 0; i <= 9; i++){
        dp[0][i] = 1;
        dp[i][1] = 1;
    }
    for(int j = 2; j <= 9; j++){
        for(int i = 1; i <= 81; i++){
            dp[i][j] = dp[i][j - 1];
            for(int k = 1; k <= 9 && k <= i; k++)
//                dp[i][j] = dp[i][j - 1] + dp[i - k][j - 1];
                dp[i][j] += dp[i - k][j - 1];
        }
    }
    dp[1][9]++; //1还多一种1000000000的情况
*/    
    int s;
    
//    dp[0][9] = 0;    //加不加都能过,不科学,应该是不加的,s=0时应该就是一个
//    while(cin >> s)   //There are multiple test cases. 有多个测试样例(看不懂英文就是苦逼)
//    printf("%lld\n", dp[s][9]);

long long w[83]={1, 10, 45, 165, 495, 1287, 3003, 6435, 12870, 24310, 43749, 75501, 125565, 202005,
    315315, 478731, 708444, 1023660, 1446445, 2001285, 2714319, 3612231, 4720815, 6063255, 7658190,
     9517662, 11645073, 14033305, 16663185, 19502505, 22505751, 25614639, 28759500, 31861500, 34835625,
      37594305, 40051495, 42126975, 43750575, 44865975, 45433800, 45433800, 44865975, 43750575, 42126975,
       40051495, 37594305, 34835625, 31861500, 28759500, 25614639, 22505751, 19502505, 16663185, 14033305,
        11645073, 9517662, 7658190, 6063255, 4720815, 3612231, 2714319, 2001285, 1446445, 1023660, 708444,
         478731, 315315, 202005, 125565, 75501, 43749, 24310, 12870, 6435, 3003, 1287, 495, 165, 45, 9, 1};
//    for(int i = 0; i <= 81; i++) 利用这个打表
//        printf("%lld, ", dp[i][9]);
    while(~scanf("%d", &s))
        printf("%lld\n", w[s]);
    return 0;
}

4-计算九位数以内各个位数字和为s的种类的更多相关文章

  1. Leetcode 357.计算各个位数不同的数字个数

    计算各个位数不同的数字个数 给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n . 示例: 输入: 2 输出: 91 解释: 答案应为除去 11,22,33 ...

  2. Java实现 LeetCode 357 计算各个位数不同的数字个数

    357. 计算各个位数不同的数字个数 给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n . 示例: 输入: 2 输出: 91 解释: 答案应为除去 11, ...

  3. leetcode 357. 计算各个位数不同的数字个数(DFS,回溯,数学)

    题目链接 357. 计算各个位数不同的数字个数 题意: 给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n . 示例: 输入: 2 输出: 91 解释: 答 ...

  4. Java 找出四位数的全部吸血鬼数字 基础代码实例

    /**  * 找出四位数的全部吸血鬼数字  * 吸血鬼数字是指位数为偶数的数字,能够由一对数字相乘而得到,而这对数字各包括乘积的一半位数的数字,当中从最初的数字中选取的数字能够随意排序.  * 以两个 ...

  5. Java 找出四位数的所有吸血鬼数字 基础代码实例

    /**  * 找出四位数的所有吸血鬼数字  * 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序.  * 以两个 ...

  6. 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花 数 ",因为153=1的三次方+5的三次方+3的三次方。

    题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个 "水仙花 数 ", ...

  7. 计算任意位数的Pi

    当用程序实现求pi的值时,也许你能够很快写出算法(利用求pi的几个公式),但是由于使用单变量保存结果,限于计算机硬件对变量的表示范围有限,因此,最多只能计算出pi值小数点后十多位.但需要得到一个更大位 ...

  8. 水仙花数------"水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。(for循环的嵌套)

    package com.zuoye.test;//打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,//其各位数字立方和等于该数本身.//例如: ...

  9. [LeetCode]1295. 统计位数为偶数的数字

    给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数. 示例 1: 输入:nums = [12,345,2,6,7896] 输出:2 解释: 12 是 2 位数字(位数为偶数)  345 ...

随机推荐

  1. [Windows]Win10下VM虚拟机桥接模式无法上网的解决办法

    Win10出来了,赶紧尝尝鲜.既然是预览版,肯定会出现以前没有过的问题.这不,问题马上就来了.我的VM虚拟机本来在Win8.1下使用桥接模式是可以上网的,但是现在不可以了.重置了好几次虚拟网络,NAT ...

  2. labview如何生成可执行文件

    labview生成可执行文件可以分为两种情况. 第一种,是电脑中有labview软件开发环境的情况 第二种,是电脑中没有安装labview软件开发环境 下面是一个简单的labview代码: 程序解释: ...

  3. PHP使用FPDF pdf添加水印中文乱码问题 pdf合并版本问题

    ---恢复内容开始--- require_once('../fpdf/fpdf.php');require_once('../fpdi/fpdi.php'); 使用此插件 pdf 合并 并添加水印 期 ...

  4. PHP MySQL Order By

    ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词 ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词默认对记录进行升序排序. 如果你想降序 ...

  5. 初学 python 之 用户登录实现过程

    要求编写登录接口 : 1. 输入用户名和密码 2.认证成功后显示欢迎信息 3.用户名输错,提示用户不存在,重新输入(5次错误,提示尝试次数过多,退出程序) 4.用户名正确,密码错误,提示密码错误,重新 ...

  6. XPath 常用语法札记

    * 不包含属性的元素 例如不包含属性的span: span[not(@*)] * 文本包含某部分的元素 例如文本包含Rank的元素: *[contains(text(),'Rank')] * 选择匹配 ...

  7. IPv4检验和计算

    IP分组中的检验和仅覆盖首部,而不管数据,首部被划分为16位的段,把所有段相加,结果取反,塞进首部检验和里 在目的主机中,首部划分为16位,相加,结果肯定是16个1,然后取反,结果为0.如下 在目的主 ...

  8. CUDA C Programming Guide 在线教程学习笔记 Part 2

    ▶ 纹理内存使用 ● 纹理内存使用有两套 API,称为 Object API 和 Reference API .纹理对象(texture object)在运行时被 Object API 创建,同时指定 ...

  9. 38. CentOS-6.3安装配置Tomcat-7

    安装说明 安装环境:CentOS-6.3安装方式:源码安装 软件:apache-tomcat-7.0.29.tar.gz下载地址:http://tomcat.apache.org/download-7 ...

  10. PHP依赖注入

    对于依赖注入 我现在的理解是把一个方法当成一个变量放进另一个方法的形参里 <?php class Factory { public static function getDb(){ return ...