• nyoj VF函数


    大意就是: 在1到在10的9次方中,找到各个位数和为固定值s的数的个数,

    首先我们确定最高位的个数,为1到9;

    以后的各位为0,到9;

    运用递归的思想,n位数有n-1位数生成

    f(n)(s) +=f(n-1)(s-k)(k=0~9)

    可以学习背包问题,直接降到一维表示,注意规划方向,从高到底。

    package vf;
    
    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int n=82;
            int dp[]=new int[n];
    
            dp[0]=0;
            int total[]=new int[n];
    
            for(int m=1;m<=9;m++)
            {
                dp[m]=1;
                total[m]=1;
    
            }
            
    
             for(int i1=1;i1<9;i1++)//每次加一位
             {
                   
                for(int j=n-1;j>=1;j--)
                {
                    int ans=0;
                    for(int k=0;k<=9&&k<j;k++)
                    {
                        
                        ans+=dp[j-k];
                         
                    }
                    dp[j]=ans;
                    
                    total[j]+=dp[j];
                      
                }
                
    
    
    
             }
    
    
             Scanner scn=new Scanner(System.in);
    
      while(scn.hasNext())
      {
    
                         
                int a=scn.nextInt();
                if(a==1)
                {
                System.out.println(total[a]+1);
                }
                else
                {
                    
                    System.out.println(total[a]);
                    
                }
    
    
    
      }
    
            
            
            
            
            
            
            
            
            
            
            
            
    
        }
    
    }
  • 相关阅读:
    层叠
    属性值的计算过程
    HTML+CSS笔记1-杂
    C语言—栈
    C语言零碎知识点
    线性表,顺序表,链表,数组的区别与联系
    C语言—单链表
    转载——从机器学习谈起
    readonly和const关键字
    C#中的扩展方法
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3704345.html
Copyright © 2020-2023  润新知