@

题目


第一题题意是一共有{0,1,2,3}四种数字供选择,问有多少个长度为n的序列满足所有m个条件,每个条件是说区间[L,R]内必须有恰好x个不同的数字。

第二题题意是10个数字供选择,问有多少个长度为n的序列满足所有m个条件,每个条件是说区间[L,R]数字的乘积必须是9的倍数。

解析

  • hdu6578
  • \(dp[t][i][j][k]\)表示填完前\(t\)个位置,{\(0,1,2,3\)}中出现的数字最后一次出现的位置排序后为\(t,i,j,k(t\gt i\gt j\gt k)\)的方案数。\(0\)表示数字未出现。
  • 枚举四种转移:
  • 填\(t-1\)位置的数字:\(dp[t][i][j][k]\)
  • 填\(i\)位置的数字:\(dp[t][t-1][j][k]\)
  • 填\(j\)位置的数字:\(dp[t][t-1][i][k]\)
  • 填\(k\)位置的数字:\(dp[t][t-1][i][j]\)
  • 但是不是所有转移都有效,所以要枚举限制条件,将不合法的转移pass掉
  • 枚举所有终点在\(t\)点的限制条件,将不合法的转移的\(dp\)值归零。
  • 时间复杂度:\(O(n^4)\),滚动数组优化空间复杂度:\(O(n^3)\)

  • 2019湖南省赛D题Modulo Nine
  • 关于乘积是否是9的倍数,这里只有3类数字,0和9表示两个3,3和6表示一个3,其他表示零个3
  • \(dp[t][i][j]\)表示填完前\(t\)个位置,最后一个3在\(i\),倒数第二个3在\(j\)的方案数。
  • 枚举3种转移:
  • 填\(0或9\):\(dp[t][t][t]\)
  • 填\(3或6\):\(dp[t][t][i]\)
  • 填其他数字:\(dp[t][i][j]\)
  • 但是不是所有转移都有效,所以要枚举限制条件,将不合法的转移pass掉
  • 枚举所有终点在\(t\)点的限制条件,将不合法的转移的\(dp\)值归零。
  • 时间复杂度:\(O(n^3)\),滚动数组优化空间复杂度:\(O(n^2)\)

两题思路一模一样,是一种很经典的dp。

AC_Code

hdu6578
const int mod = 998244353;
const int MXN = 1e5 + 7;
const int MXE = 2e5 + 7; int n, m, c;
vector<pii> mp[MXN];
LL dp[2][101][101][101];
void get_dp() {
dp[c][0][0][0] = 1;
for(int t = 1; t <= n; ++t) {
c ^= 1;
for(int i = 0; i <= t; ++i) for(int j = 0; j <= i; ++j) for(int k = 0; k <= j; ++k) dp[c][i][j][k] = 0;
for(int i = 0; i < t; ++i) for(int j = 0; j <= i; ++j) for(int k = 0; k <= j; ++k) {
if((i != j && j != k) || k == 0) {
dp[c][i][j][k] = (dp[c][i][j][k] + dp[c ^ 1][i][j][k]) % mod;
dp[c][t - 1][j][k] = (dp[c][t - 1][j][k] + dp[c ^ 1][i][j][k]) % mod;
dp[c][t - 1][i][j] = (dp[c][t - 1][i][j] + dp[c ^ 1][i][j][k]) % mod;
dp[c][t - 1][i][k] = (dp[c][t - 1][i][k] + dp[c ^ 1][i][j][k]) % mod;
}
}
for(int h = 0; h < (int)mp[t].size(); ++h) {
int l = mp[t][h].fi, x = mp[t][h].se;
for(int i = 0; i < t; ++i) for(int j = 0; j <= i; ++j) for(int k = 0; k <= j; ++k) {
int cnt = 1;
if(i >= l) ++ cnt;
if(j >= l) ++ cnt;
if(k >= l) ++ cnt;
if(cnt != x) dp[c][i][j][k] = 0;
}
}
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("/home/cwolf9/CLionProjects/ccc/in.txt", "r", stdin);
//freopen("/home/cwolf9/CLionProjects/ccc/out.txt", "w", stdout);
#endif
int tim = read();
while(tim --) {
n = read(), m = read();
for(int i = 1, a, b, c; i <= m; ++i) {
a = read(), b = read(), c = read();
mp[b].eb(mk(a, c));
}
get_dp();
LL ans = 0;
for(int i = 0; i < n; ++i)
for(int j = 0; j <= i; ++j)
for(int k = 0; k <= j; ++k) if((i != j && j != k) || k == 0) ans = (ans + dp[c][i][j][k]) % mod;
printf("%lld\n", (ans+mod)%mod);
for(int i = 0; i <= n; ++i) mp[i].clear();
}
#ifndef ONLINE_JUDGE
cout << "time cost:" << clock() << "ms" << endl;
#endif
return 0;
}
2019省赛D
const int mod = 1e9 + 7;
const int MXN = 1e5 + 7;
const int MXE = 2e5 + 7; int n, m, c;
int mp[MXN];
LL dp[2][101][101];
void get_dp() {
clr(dp, 0);
dp[c][0][0] = 1;
for(int t = 1; t <= n; ++t) {
c ^= 1;
for(int i = 0; i <= t; ++i) for(int j = 0; j <= i; ++j) dp[c][i][j] = 0;
for(int i = 0; i <= t; ++i) {
for(int j = 0; j <= i; ++j) {
dp[c][i][j] = (dp[c][i][j] + dp[c^1][i][j] * 6) % mod;
dp[c][t][i] = (dp[c][t][i] + dp[c^1][i][j] * 2) % mod;
dp[c][t][t] = (dp[c][t][t] + dp[c^1][i][j] * 2) % mod;
}
}
if(mp[t] == -1) continue;
for(int i = 0; i <= t; ++i) {
for(int j = 0; j <= i; ++j) {
if(i < mp[t] || j < mp[t]) dp[c][i][j] = 0;
}
}
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("/home/cwolf9/CLionProjects/ccc/in.txt", "r", stdin);
//freopen("/home/cwolf9/CLionProjects/ccc/out.txt", "w", stdout);
#endif
int tim = 1;
while(~scanf("%d%d", &n, &m)) {
for(int i = 1; i <= n; ++i) mp[i] = - 1;
for(int i = 1, a, b; i <= m; ++i) {
a = read(), b = read();
mp[b] = big(mp[b], a);
}
get_dp();
LL ans = 0;
for(int i = 0; i <= n; ++i) for(int j = 0; j <= i; ++j) ans = (ans + dp[c][i][j]) % mod;
printf("%lld\n", (ans + mod) % mod);
}
#ifndef ONLINE_JUDGE
cout << "time cost:" << clock() << "ms" << endl;
#endif
return 0;
}

hdu6578 2019湖南省赛D题Modulo Nine 经典dp的更多相关文章

  1. 2019湖南省赛H题——概率转移&&逆矩阵

    题意 题目链接 Bobo有一个 $n+m$ 个节点的有向图,编号分别为 $1 \sim n$,他还有一个 $n$ 行 $n+m$ 列的矩阵 $P$. 如果在 $t$ 时刻他位于节点 $u(1 \leq ...

  2. 牛客集训 湖南省赛E题 Grid 动态开点线段树

    国庆牛客集训的题,正好准备好好训练线段树,想起来就补一下. 题意很简单,两种操作行合并或者列合并,每个操作后计算有多少个子块. 这题应该先推导公式,行操作或者列操作只有一种的时候,很简单,总数就是n* ...

  3. 2018湖南省赛B题“2018”

    题面懒得敲了,反正看这篇博客的肯定知道题面. 比赛时想按约数的一些性质分情况讨论出公式然后在合并,结果单考虑矩阵里出现2018和1009(与2互质,1009出现次数等于2)出现的情况就写了一长串公式, ...

  4. 2016湖南省赛--A题--2016

    2016 [TOC] Description 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. 1≤a≤n,1≤b≤m; 2. a×b 是 2016 的倍数. Input ...

  5. zoj 4122 Triangle City 2019山东省赛J题

    题目链接 题意: 给出一个无向图,类似三角形的样子,然后给出边的权值,问找一条从第一个点到最后一个点的路径,要求每一条边只能走一次,并且权值和最大,点可以重复走. 思路: 首先观察这个图可以发现,所有 ...

  6. HDU 4758 Walk Through Squares (2013南京网络赛1011题,AC自动机+DP)

    Walk Through Squares Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Oth ...

  7. ZOJ 3949 (17th 浙大校赛 B题,树型DP)

    题目链接  The 17th Zhejiang University Programming Contest Problem B 题意  给定一棵树,现在要加一条连接$1$(根结点)和$x$的边,求加 ...

  8. ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval

    ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval 题目大意:给一个长度为n,值域为[1, n]的序列{a},要求支持m次操作: 单点修改 1 pos val 询 ...

  9. ## [湖南省赛2019]Findme ###

    [湖南省赛2019]Findme 1.题目概述 2.解题过程 010打开这几张图片 先简单分析一下这几张图片 简单分析 1.png 从外观上,1.png明显高度太低,需要更改 2.png 2.png末 ...

随机推荐

  1. [CSP-S模拟测试73]题解

    A.小P的2048 作为一个看B哥玩了一个寒假的人这种题闭眼切好吧 模拟即可.程序模块化后直接复制粘贴. 说什么模拟不能复制粘贴的都没水平 #include<cstdio> #includ ...

  2. jQuery积累:serialize()、stringify()、toJSON()

    *)表单serialize()序列化,和serializeArray() ##)应用场景 当Ajax或者get请求发送表单中的某一个,或者某几个值到后台时,通过jQuery就能获取到这些值.然后作为A ...

  3. 杂项:JFB-权限设置

    ylbtech-杂项:JFB-权限设置 1. 家政经理返回顶部 1. if (UserContext.GetTeamId() == (int)UserType.Manager) { condition ...

  4. CSS-给Font Awesome拓展Base64编码的图标

    和 fa 一样设置到::before中就行了,不过 fa 是直接设置内容,这里用的背景图 .fa-science-garden::before { content: ""; dis ...

  5. 【GDAL】聊聊GDAL的数据模型

    GDAL是个非常优秀的GIS数据操作库,最近在和实习生介绍GDAL的简单使用,顺手写下记录 本篇记录栅格数据,代码环境为C# 在GDAL中,栅格数据大致是以一个Dataset对应一个栅格数据文件(.T ...

  6. jquery.form.js官方插件介绍Form插件,支持Ajax,支持Ajax文件上传

    jquery.form.js官方插件介绍Form插件,支持Ajax,支持Ajax文件上传 http://www.malsup.com/jquery/form/#getting-started [JQu ...

  7. Maven 上传文件 Error creating bean with name 'multipartResolver':

    <!--配置MultipartResolver 处理文件上传--><bean id="multipartResolver" class="org.spr ...

  8. 斯坦福【概率与统计】课程笔记(三):EDA | 直方图

    单个定量变量的直方图表示 大家知道,定量变量是连续型变量,即不会像分类变量那样有明显的分类,那么如何将其画成直方图呢?一般来说,会将其按照某个维度来将其分组(group),举个例子. 我们有15个学生 ...

  9. selenium,webdriver模仿浏览器访问百度 基础1

    这是一种比较好的反反爬技术 #安装:pip install selenium=2.48.0 #显示:pip show selenium #卸载:pip uninstall selenium #模拟用户 ...

  10. excel cannot access the file there are several possible reasons

    original link Microsoft Office Excel cannot access the file ‘c:\file.xlsx’. There are several possib ...