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]);

                

            }







  }



        

        

        

        

        

        

        

        

        

        

        

        



    }



}

你可能感兴趣的:(函数)