zoukankan      html  css  js  c++  java
  • 【HDOJ】3652 B-number

    终于自己写出来一道数位DP啊。继续训练DP。

      1 /* 3652 */
      2 #include <iostream>
      3 #include <sstream>
      4 #include <string>
      5 #include <map>
      6 #include <queue>
      7 #include <set>
      8 #include <stack>
      9 #include <vector>
     10 #include <deque>
     11 #include <algorithm>
     12 #include <cstdio>
     13 #include <cmath>
     14 #include <ctime>
     15 #include <cstring>
     16 #include <climits>
     17 #include <cctype>
     18 #include <cassert>
     19 #include <functional>
     20 #include <iterator>
     21 #include <iomanip>
     22 using namespace std;
     23 //#pragma comment(linker,"/STACK:102400000,1024000")
     24 
     25 #define sti                set<int>
     26 #define stpii            set<pair<int, int> >
     27 #define mpii            map<int,int>
     28 #define vi                vector<int>
     29 #define pii                pair<int,int>
     30 #define vpii            vector<pair<int,int> >
     31 #define rep(i, a, n)     for (int i=a;i<n;++i)
     32 #define per(i, a, n)     for (int i=n-1;i>=a;--i)
     33 #define clr                clear
     34 #define pb                 push_back
     35 #define mp                 make_pair
     36 #define fir                first
     37 #define sec                second
     38 #define all(x)             (x).begin(),(x).end()
     39 #define SZ(x)             ((int)(x).size())
     40 #define lson            l, mid, rt<<1
     41 #define rson            mid+1, r, rt<<1|1
     42 
     43 const int maxl = 12;
     44 int dp[maxl][2][13][3];
     45 char s[15];
     46 
     47 void solve() {
     48     int len = strlen(s);
     49     
     50     rep(i, 0, len)
     51         s[i] -= '0';
     52         
     53     memset(dp, 0, sizeof(dp));
     54     dp[0][0][0][0] = 1;
     55     
     56     rep(i, 0, len) {
     57         rep(j, 0, 13) {
     58             rep(k, 0, 3) {
     59                 if (!dp[i][0][j][k])
     60                     continue;
     61                 int dtmp = (i==0) ? s[i]+1:10;
     62                 rep(d, 0, dtmp) {
     63                     int jj = (j*10 + d)%13;
     64                     int kk = 0;
     65                     int p = 0;
     66                     
     67                     if (k == 2) {
     68                         kk = 2;
     69                     } else if (k == 1) {
     70                         if (d == 3) {
     71                             kk = 2;
     72                         } else if (d == 1) {
     73                             kk = 1;
     74                         }
     75                     } else {
     76                         if (d == 1) {
     77                             kk = 1;
     78                         }
     79                     }
     80                     
     81                     if (i==0 && d==s[i])
     82                         p = 1;
     83                     
     84                     dp[i+1][p][jj][kk] += dp[i][0][j][k];
     85                 }
     86             }
     87         }
     88         
     89         rep(j, 0, 13) {
     90             rep(k, 0, 3) {
     91                 if (!dp[i][1][j][k])
     92                     continue;
     93                 rep(d, 0, s[i]+1) {
     94                     int jj = (j*10 + d)%13;
     95                     int kk = 0;
     96                     int p = 0;
     97                     
     98                     if (k == 2) {
     99                         kk = 2;
    100                     } else if (k == 1) {
    101                         if (d == 3) {
    102                             kk = 2;
    103                         } else if (d == 1) {
    104                             kk = 1;
    105                         }
    106                     } else {
    107                         if (d == 1) {
    108                             kk = 1;
    109                         }
    110                     }
    111                     
    112                     if (d == s[i])
    113                         p = 1;
    114                     
    115                     dp[i+1][p][jj][kk] += dp[i][1][j][k];
    116                 }
    117             }
    118         }
    119     }
    120     
    121     int ans = dp[len][0][0][2];
    122     printf("%d
    ", ans);
    123 }
    124 
    125 int main() {
    126     ios::sync_with_stdio(false);
    127     #ifndef ONLINE_JUDGE
    128         freopen("data.in", "r", stdin);
    129         freopen("data.out", "w", stdout);
    130     #endif
    131     
    132     int x;
    133     
    134     while (scanf("%d", &x)!=EOF) {
    135         ++x;
    136         sprintf(s, "%d", x);
    137         solve();
    138     }
    139     
    140     #ifndef ONLINE_JUDGE
    141         printf("time = %d.
    ", (int)clock());
    142     #endif
    143     
    144     return 0;
    145 }
  • 相关阅读:
    gitee之部署vue项目dist目录
    arcgis js 之 featureLayer创建模板
    arcgis js 之featureLayer服务查询及筛选
    video.js视频播放
    vue之监听对象、对象数组的改变
    Element-ui组件库Table表格导出Excel文件
    sublime 常用插件
    前端工具
    css 待处理
    移动前端开发:待处理
  • 原文地址:https://www.cnblogs.com/bombe1013/p/5089749.html
Copyright © 2011-2022 走看看