• URAL 1586 Threeprime Numbers(DP)


    题目链接

    题意 : 定义Threeprime为它的任意连续3位上的数字,都构成一个3位的质数。 求对于一个n位数,存在多少个Threeprime数。

    思路 : 记录[100, 999]范围内所有素数(标记的是该素数的每一位x1,x2,x3)。然后从n = 4往后,定义dp[i][x2][x3],  i 表示到第 i 位时,第 i-1 位为 x2 , 第 i 位x3,此时所包含的情况数。

    dp[i][x2][x3] = dp[i][x2][x3] + dp[i-1][x1][x2];最后求和sum(dp[n][x2][x3]);

     1 //1586
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <iostream>
     5 #define MOD 1000000009
     6 #define LL long long
     7 using namespace std ;
     8 
     9 int dp[10010][10][10],prime[10][10][10] ;
    10 int vis[1010] = {0} ,cnt = 0;
    11 
    12 void solve()
    13 {
    14     cnt = 0;
    15     memset(vis,0,sizeof(vis)) ;
    16     for(int i = 2 ; i <= 999 ; i++)
    17     {
    18         if(!vis[i])
    19         {
    20             for(int j = i*i ; j <= 999 ; j += i)
    21                 vis[j] = 1 ;
    22         }
    23     }
    24     for(int i = 100 ; i <= 999 ; i ++)
    25     {
    26         if(!vis[i])
    27         {
    28             int x1 = i / 100 ;
    29             int x2 = i / 10 % 10 ;
    30             int x3 = i % 10 ;
    31             prime[x1][x2][x3] = 1;
    32             dp[3][x2][x3] += 1 ;
    33             cnt ++ ;
    34         }
    35     }
    36 }
    37 int main()
    38 {
    39     int n ;
    40     scanf("%d",&n);
    41     solve() ;
    42     if(n == 3) {
    43         printf("%d
    ",cnt % MOD) ;
    44         return 0 ;
    45     }
    46     for(int i = 4 ; i <= n ; i++)
    47         for(int x1 = 1 ; x1 <= 9 ; x1 ++)
    48             for(int x2 = 1 ; x2 <= 9 ; x2 ++)
    49                 for(int x3 = 1 ; x3 <= 9 ; x3 ++)
    50                     if(dp[i-1][x1][x2]  && prime[x1][x2][x3])
    51                         dp[i][x2][x3] = (dp[i][x2][x3] + dp[i-1][x1][x2]) % MOD;
    52     int ans = 0 ;
    53     for(int x2 = 1 ; x2 <= 9 ; x2 ++)
    54     {
    55         for(int x3 = 1 ; x3 <= 9 ; x3 ++)
    56         {
    57             ans = (ans+dp[n][x2][x3])%MOD ;
    58         }
    59     }
    60     printf("%d
    ",ans) ;
    61     return 0 ;
    62 }
    View Code
  • 相关阅读:
    css数学运算函数 calc(),和css的数学运算
    MySQL设置字段的默认值为当前系统时间
    今天阿里云服务器被挂马wnTKYg挖矿的清理
    linux shell常用命令
    无损扩容,调整Centos6.5服务器分区大小,不适用centos7,centos6.5 调整逻辑卷大小
    添加远程库
    interface 设置默认值
    radio根据value值动态选中
    获取下拉js 具体值
    mysql中int、bigint、smallint 和 tinyint的存储
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3913976.html
Copyright © 2020-2023  润新知