码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【题解】石子染色 [背包DP]


    石子染色

    题目描述

    Bob \text{Bob} Bob 将 x x x 个石子分为 n n n 堆( 1 ≤ n , x ≤ 2000 1\leq n,x \leq 2000 1≤n,x≤2000),第 i i i 堆有 a i a_i ai​ 个。 Bob \text{Bob} Bob
    会从数列 { p n } : p i = i \{p_n\}:p_i=i {pn​}:pi​=i( 1 ≤ i ≤ n 1\leq i\leq n 1≤i≤n)中任意选择若干个数组成集合 S S S。对于任意的 i i i( 1 ≤ i ≤ n 1\leq i\leq n 1≤i≤n),若 i ∈ S i\in S i∈S,那么 Bob \text{Bob} Bob 会将第 i i i
    堆染为红色,反之染为蓝色。记红色的石子总个数为 r r r,蓝色的石子总个数为 b b b,映射 f f f 满足
    f ( S ) = ∣ r − b ∣ f(S)=|r-b| f(S)=∣r−b∣。 当 S S S 取遍时,求 [ ∑ f ( S ) ]   m o d   998244353 \left[\sum f(S)\right] \bmod 998244353 [∑f(S)]mod998244353 的值。

    格式

    Input

    第一行为一个数 T T T( T ≤ 3 T\leq3 T≤3),表示数据组数。

    对于每组数据,第一行为两个数 x , n x,n x,n;第二行有 n n n 个数,表示 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots,a_n a1​,a2​,⋯,an​。

    Output

    [ ∑ f ( S ) ]   m o d   998244353 \left[\sum f(S)\right] \bmod 998244353 [∑f(S)]mod998244353 的值。

    分析

    我们知道

    f ( S ) = ∣ r − b ∣ ,   x = r + b f(S) = |r-b|,\ x=r+b f(S)=∣r−b∣, x=r+b

    那么有

    f ( S ) = ∣ x − 2 b ∣ f(S) = |x-2b| f(S)=∣x−2b∣

    我们设 S S S 的所有元素值和为 i i i 的 S S S 有 s i s_i si​ 个,那么就有

    ∑ f ( S ) = ∑ ∣ r − b ∣ = ∑ ∣ x − 2 b ∣ = ∑ i = 1 x s i ∣ x − 2 i ∣ \sum f(S) = \sum|r-b| = \sum|x-2b| = \sum_{i=1}^{x}s_i|x-2i| ∑f(S)=∑∣r−b∣=∑∣x−2b∣=i=1∑x​si​∣x−2i∣

    Code

    #include 
    #define MOD 998244353
    using namespace std;
    long long x, n, s[2005];
    int       T;
    int       main()
    {
        // freopen("color.in", "r", stdio);
        // freopen("color.out", "w", stdio);
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        cin >> T;
        while (T--)
        {
            memset(s, 0, sizeof s);
            s[0] = 1;
            cin >> x >> n;
            for (int i(1), k; i <= n; ++i)
            {
                cin >> k;
                for (int j(x); j >= k; --j)
                    s[j] = (s[j] + s[j - k]) % MOD;
            }
            long long ans = 0;
            for (int i(0); i <= x; ++i)
                ans = (ans + abs(x - 2 * i) % MOD * s[i] % MOD) % MOD;
            cout << ans << "\n";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    AD

    Lvshu   OJ   ,大量高质量题目等着你,点击这里马上注册。 {\color{green}\large{\texttt{Lvshu OJ }}\color{blue}\text{,大量高质量题目等着你,点击这里马上注册。}} Lvshu OJ ,大量高质量题目等着你,点击这里马上注册。

    Lvshu   OS ,崭新的系统,点击这里,马上查看详情 {\color{blue}\large{\texttt{Lvshu OS}}\color{green}\text{,崭新的系统,点击这里,马上查看详情}} Lvshu OS,崭新的系统,点击这里,马上查看详情

  • 相关阅读:
    算法随想录第八天打卡|344.反转字符串,541. 反转字符串II, 卡码网:54.替换数字, 151.翻转字符串里的单词,卡码网:55.右旋转字符串
    JAVA:实现PiNilakantha方法计算pi算法(附完整源码)
    叕跨域了...
    【进程与线程】进程与线程 Q&A
    C语言--冒泡排序和简答选择排序
    Python Web开发记录 Day9:Django part3 用户管理
    护眼灯和白炽灯哪个更保护眼睛?推荐真正护眼的护眼灯
    李廉洋:4.24黄金看跌趋势明显,原油今日或呈震荡走势分析及策略。
    V8中的快慢属性(图文分解更易理解)
    gitlab在项目中创建自己的分支的顺序操作,一整套流程
  • 原文地址:https://blog.csdn.net/hello_wangping/article/details/127417659
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号