您当前的位置: 首页 >  算法

HeartFireY

暂无认证

  • 3浏览

    0关注

    334博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

2022牛客寒假算法基础集训营1 ABCDEFGHIJKL

HeartFireY 发布时间:2022-01-25 18:06:53 ,浏览量:3

文章目录
    • A.[九小时九个人九扇门](https://ac.nowcoder.com/acm/contest/23106/A)
      • 思路
      • Accepted Code
    • B.[炸鸡块君与FIFA22](https://ac.nowcoder.com/acm/contest/23106/B)
    • C.[Baby's first attempt on CPU](https://ac.nowcoder.com/acm/contest/23106/C)
      • 思路
      • Accepted Code
    • D.[牛牛做数论](https://ac.nowcoder.com/acm/contest/23106/D)
      • 思路
      • Accepted Code
    • E.[炸鸡块君的高中回忆](https://ac.nowcoder.com/acm/contest/23106/E)
      • 思路
      • Accepted Code
    • F.[中位数切分](https://ac.nowcoder.com/acm/contest/23106/F)
      • 思路
      • Accepted Code
    • G.[ACM is all you need](https://ac.nowcoder.com/acm/contest/23106/G)
    • H.[牛牛看云](https://ac.nowcoder.com/acm/contest/23106/H)
      • 思路
      • Accepted Code
    • I.[B站与各唱各的](https://ac.nowcoder.com/acm/contest/23106/I)
      • 思路
      • Accepted Code
    • J.[小朋友做游戏](https://ac.nowcoder.com/acm/contest/23106/J)
      • 思路
      • Accepted Code
    • K.[冒险公社](https://ac.nowcoder.com/acm/contest/23106/K)
    • L.[牛牛学走路](https://ac.nowcoder.com/acm/contest/23106/L)
      • 思路
      • Accepted Code

A.九小时九个人九扇门 思路

首先观察数根的性质,令 R ( x ) R(x) R(x)表示数字 x x x的数字根,那么有 R ( a ) + R ( b ) = R ( a + b ) R(a) + R(b) = R(a + b) R(a)+R(b)=R(a+b),根据这个性质:

  • 设 d p [ i ] [ j ] dp[i][j] dp[i][j]表示前 i i i个人可以组合出 j j j的方案数

  • 第 i i i个人被加入方案时:第 i − 1 i-1 i−1个人组合出 j j j的状态下可以向第 i i i个人组合出 j + R ( a [ i ] ) j + R(a[i]) j+R(a[i])的状态转移,也就是 d p [ i ] [ j + R ( a [ i ] ) ] + = d p [ i − 1 ] [ j ] dp[i][j + R(a[i])] += dp[i - 1][j] dp[i][j+R(a[i])]+=dp[i−1][j]

  • 第 i i i个人不加入方案时:第 i − 1 i-1 i−1个人组合出 j j j的状态下可以向第 i i i个人组合出 j j j的状态转移,也就是 d p [ i ] [ j ] + = d p [ i − 1 ] [ j ] dp[i][j] += dp[i - 1][j] dp[i][j]+=dp[i−1][j]

  • 注意从 0 0 0开始枚举,因为第 i i i个人本身可以作为一种方案存在

求数根可以直接应用性质:模 9 9 9取根,注意 9 9 9的倍数直接赋 9 9 9,然后根据以上分析写即可。

Accepted Code
#include 
using namespace std;

const int N = 1e5 + 10, MOD = 998244353;
int dp[N][15], a[N];

inline int get(int x){
    if(x > n;
    dp[0][0] = 1;
    for(int i = 1; i > num;
        a[i] = get(num);
    }
    for(int i = 1; i             
关注
打赏
1662600635
查看更多评论
0.0464s