zoukankan      html  css  js  c++  java
  • 1043 幸运号码

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 
    1个长度为2N的数,如果左边N个数的和 = 右边N个数的和,那么就是一个幸运号码。
    例如:99、1230、123312是幸运号码。
    给出一个N,求长度为2N的幸运号码的数量。由于数量很大,输出数量 Mod 10^9 + 7的结果即可。
    Input
    输入N(1<= N <= 1000)
    Output
    输出幸运号码的数量 Mod 10^9 + 7
    Input示例
    1
    Output示例
    9
    思路:dp。
    dp[i][j]表示i个数组成的数字的和为j的方案数 ,这个需要两遍dp,一个有前导0,一个没有。
     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<string.h>
     5 #include<queue>
     6 #include<math.h>
     7 #include<set>
     8 #include<vector>
     9 #include<string.h>
    10 using namespace std;
    11 typedef long long LL;
    12 int dp[1005][10005];
    13 int dpp[1005][10005];
    14 const int mod = 1e9+7;
    15 int main(void)
    16 {
    17     int i,j,k,n;
    18     memset(dp,0,sizeof(dp));
    19     dp[0][0] = 1;
    20     scanf("%d",&n);
    21     for(i = 0; i < n; i++)
    22     {
    23         for(j = 0; j <= 10000 ; j++)
    24         {
    25             if(dp[i][j]==0)
    26                 break;
    27             else {for(int s = 0; s <= 9; s++)
    28             {
    29                 dp[i+1][s+j] = dp[i+1][s+j] + dp[i][j];
    30                 dp[i+1][s+j]%=mod;
    31             }}
    32         }
    33     }
    34     memset(dpp,0,sizeof(dpp));
    35     dpp[0][0] = 1;
    36     for(i = 0; i < n; i++)
    37     {
    38         if(i==0)
    39         {
    40             for(j = 0; j <= 10000 ; j++)
    41             {
    42                 if(dpp[i][j]==0)
    43                     break;
    44                 else {for(int s = 0; s <= 9; s++)
    45                 {
    46                     dpp[i+1][s+j] = dpp[i+1][s+j] + dpp[i][j];
    47                     dpp[i+1][s+j]%=mod;
    48                 }
    49             }}
    50         }
    51         else
    52         {
    53             for(j = 1; j <= 10000 ; j++)
    54             {
    55                 if(dpp[i][j]==0)
    56                 {
    57                     break;
    58                 }
    59                 for(int s = 0; s <= 9; s++)
    60                 {
    61                     dpp[i+1][s+j] = dpp[i+1][s+j] + dpp[i][j];
    62                     dpp[i+1][s+j]%=mod;
    63                 }
    64             }
    65         }
    66     }
    67     LL sum = 0;
    68     for(i = 1; i <= 10000; i++)
    69     {
    70         if(dp[n][j] == 0)break;
    71         else
    72         {
    73             sum = sum + (LL)dp[n][i]*(LL)dpp[n][i]%mod;
    74             sum%=mod;
    75         }
    76     }
    77     printf("%lld
    ",sum);
    78     return 0;
    79 }
    
    
    油!油!you@
  • 相关阅读:
    移动web开发视口viewport
    五层网络模型
    移动web开发理解设备像素、CSS像素、DPR
    git rebase简单使用
    position:fixed; IE6下解决办法。。
    (经典收藏)三十款最常用css选择器解析
    js控制搜索内容为空则搜索按钮不能用
    SAPBOE Universe 设计方法
    【转帖】开源BI系统分类
    【转贴】SQL2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5841876.html
Copyright © 2011-2022 走看看