1 条题解

  • 0
    @ 2025-2-14 21:20:40

    C :

    #include<stdio.h>
    int main()
    {
        int i,j,k,dp[83][30]={0},n;
    	for(i=0;i<12;++i)
    		dp[0][i]=1;
    	 for(i=1;i<82;++i)
    	  for(j=1;j<10;++j)
    		  for(k=0;k<10&&i-k>=0;++k)
    		  {
    			     if(dp[i-k][j-1])
    			    dp[i][j]+=dp[i-k][j-1];
    			}
     while(~scanf("%d",&n))
     {
         if(n==1)
             printf("10\n");
         else printf("%d\n",dp[n][9]);
     }
     return 0;
    }
    

    C++ :

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<ctime>
    #include<cmath>
    #include<string>
    #include<cstdio>
    using namespace std;
    
    int dp[100][11];
    
    void init_dp() {
        dp[0][1] = 1;
        for(int i = 1; i < 10; ++i) dp[i][1] = dp[1][i] = 1;
        dp[1][10] = 1;
        for(int i = 2; i < 10; ++i) {
            for(int s = 2; s <= i * 9; ++s) {
                for(int j = 0; j <= 9 && j < s; ++j) {
                    dp[s][i] += dp[s-j][i-1];
                }
            }
        }
        //for(int i = 0; i < 11; ++i) cout<<dp[i*9][i]<<"--"<<endl;
    }
    
    int main() {
        int s;
        init_dp();
        while(~scanf("%d", &s)) {
            int ans = 0;
            for(int i = 0; i < 11; ++i) ans += dp[s][i];
            printf("%d\n", ans);
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    794
    时间
    1000ms
    内存
    64MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者