首页 > 其他分享 >【题解】 [USACO 2009 Mar] Cow Frisbee Team S

【题解】 [USACO 2009 Mar] Cow Frisbee Team S

时间:2024-05-26 09:05:29浏览次数:29  
标签:Frisbee Cow int 题解 个数 中取 取余 dp mod

题目描述

题意分析

从 \(N\) 个整数中取若干个(不能不选),且取的数之和为 \(F\) 的倍数的总方案数对\(10^8\)取余的值

思路

这道题是一道二维线性DP。那么根据线性DP的解题方法
首先,找出题目的阶段性。这道题显而易见方案数随着选择的个数而变化,那么这道题就以选择的个数作为阶段。
接着,根据阶段定义状态。这道题的状态可以定义为 \(dp_{i, j}\) 表示 从前 \(i\) 个数中取,且取的数之和对 \(F\) 取余的值为 \(j\) 的 方案数对\(10^8\)求余的值
然后,根据状态分析状态转移方程。每一个状态的情况可以分类讨论:

  • 不取第 \(i\) 个数,则从前 \(i - 1\) 个数中取的数之和对 \(F\) 取余的值亦要为 \(j\),那么不取第 \(i\) 个数,余数仍为 \(j + 0 = j\)。
  • 不取第 \(i\) 个数,则从前 \(i - 1\) 个数中取的数之和对 \(F\) 取余的值要为 \((j - a_i + F) \mod F\),那么取第 \(i\) 个数,余数变为 \((j - a_i + F) \mod F + a_i = j\)。

综上所述,状态转移方程为:$$dp_{i, j} = (dp_{i, j} + dp_{i - 1, j} + dp_{i - 1, (j - a_i + F) \mod F}) \mod 10^8$$
最后,定义初值。即 $$dp_{i, a_i \mod F} = 1$$
最终输出的是从前 \(n\) 个数中取,且取的数之和对 \(F\) 取余的值为 \(0\) 的总方案数对\(10^8\)取余的值,即 \(dp_{n, 0}\)。

代码

#include <bits/stdc++.h>
using namespace std;

const int N = 2005, F = 1005, MOD = 1e8;
int n, f, a[N];
int dp[N][F];

int main()
{
    scanf("%d%d", &n, &f);
    for (int i = 1; i <= n; i ++ )
    {
        scanf("%d", &a[i]);
        a[i] %= f; // 预处理取模
    }

    // 定义初值
    for (int i = 1; i <= n; i ++ ) dp[i][a[i]] = 1;
    // 状态转移
    for (int i = 1; i <= n; i ++ )
        for (int j = 0; j < f; j ++ )
            dp[i][j] = (dp[i][j] + dp[i - 1][j] + dp[i - 1][(j - a[i] + f) % f]) % MOD;
    printf("%d\n", dp[n][0]); // 输出答案

    return 0;
}

标签:Frisbee,Cow,int,题解,个数,中取,取余,dp,mod
From: https://www.cnblogs.com/T-hong/p/18213244

相关文章

  • 【赛题解析】【网络建设与运维】2023年全国职业院校技能大赛中职组“网络建设与运维”
    在此之前,欢迎关注波比网络波比网络官方公众号:blbinet波比网络工作室官方公众号:blbistudio技能大赛各赛项交流群:https://www.blbi.cn/threads/40/更多正式赛题源文件访问:https://www.blbi.cn获取技术支持访问:https://www.blbi.cn/form/1/selectNISP、CIPS、PTE证书可......
  • 【赛题解析】【网络建设与运维】2023年全国职业院校技能大赛中职组“网络建设与运维”
    在此之前,欢迎关注波比网络波比网络官方公众号:blbinet波比网络工作室官方公众号:blbistudio技能大赛各赛项交流群:https://www.blbi.cn/threads/40/更多正式赛题源文件访问:https://www.blbi.cn获取技术支持访问:https://www.blbi.cn/form/1/selectNISP、CIPS、PTE证书可......
  • Tokio Marine & Nichido Fire Insurance Programming Contest 2024(AtCoder Beginner C
    A-WhoAtetheCake?题意:有三个嫌疑犯(1,2,3(号码))现在有两个证人他们指出谁不是嫌疑犯,你可以找到确定的那个罪人吗?找到输出这个人的号码没找到输出-1思路:如果两人指出的人是一个人则输出-1不是则输出6-a-b,因为1+2+3=6(sum)减去a,b肯定可以到达......
  • 题解:P8267 [USACO22OPEN] Counting Liars B & U208878 晴天
    其实,这个题,只需要最简单的枚举,加上最简单的二分查找即可~\(1\leN\le1000\)?枚举吧~咋枚举?显然,最好状态下Bessie的位置一定是某个\(p_i\),否则差一个就会导致有个奶牛要说谎。所以我们枚举(理论来讲要先去个重,这样快一点,不过貌似数据没有重的~)\(p_i\),每次遍历这帮奶牛看看有......
  • 2024XJTUPC西安交通大学校赛VP题解
    每次vp都自闭,已成习惯,时间还是分配的不合理,debug时做太多无用功。一键做题A.交小西的礼物输出a+b+2c+3d即可#pragmaGCCoptimize(3,"Ofast","inline")#include<bits/stdc++.h>#defineinf0x3f3f3f3f3fusingnamespacestd;usingll=longlong;usingpii=......
  • 题解【[SCOI2008] 配对】
    题目链接如果没有“配对数字不相同”的限制,将\(a,b\)数组排序后一一配对就能得到最小值。回到原题,考虑一种极端情况,\(\foralli\in[1,n],a_i=b_i\)即排序后全等。若\(n\)为偶数,一种显然的构造方法是:123456214365即分成两个两个一组,然后组内交换,这样跨越幅......
  • Xfce4桌面背景和桌面图标消失问题解决@FreeBSD
    问题:Xfce4桌面背景和桌面图标消失以前碰到过好几次桌面背景和桌面图标消失,整个桌面除了上面一条和下面中间的工具条,其它地方全是黑色的问题,但是这次重启之后也没有修复,整个桌面乌黑一片,啥都没有,用起来特别不得劲,于是开始修复。修复过程咨询文心,建议这样设置:检查壁纸设置:......
  • 【NOI2010】能量采集 题解
    【NOI2010】能量采集题解谨纪念我的第一道手推出来的莫反题。题目大意:已知\(n\),\(m\),求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^m(2\cdot\gcd(i,j)-1)\)。首先变形一手:\[\sum\limits_{i=1}^n\sum\limits_{j=1}^m(2\cdot\gcd(i,j)-1)=2\sum\limits_{i=1}^n\sum\limits_{j=......
  • CF1973F Maximum GCD Sum Queries 题解
    题目链接点击打开链接题目解法首先想到枚举两个数列的$\gcd$,求最小代价两个数列的\(\gcd\)应该分别是\(a_1,b_1\)的因数或\(b_1,a_1\)的因数这样就把枚举范围缩小到了\(d(a_1)\timesd(b_1)\),这求最小代价需要\(O(n)\),不够快假设枚举的\(\gcd\)分别为\(x,y\)......
  • CF1909I Short Permutation Problem 题解
    这是一道*1900的黑。考虑枚举\(m\),将\(<\fracm2\)和\(\ge\fracm2\)的数分开讨论。考虑相邻两个数\(a,b\(a>b)\)分别在\(\fracm2\)的两侧,则有\(b\gem-a\)。考虑将所有数按某种方法从小到大排序,以\(\min(x,m-x)\)为第一关键字,\(-x\)为第二关键字,则排列中......