题意:构造一个长度为n的子串,要求在m个区间内,在[ li , ri ]保证要有x个不同的数。
题解:我们设dp[t][i][j][k],代表{ 0 ,1,2,3 }四个数最后一次出现的位置。且保证( t >= i >= j >= k )。
dp[t][i][j][k] += dp[t][i][j][k] ;// 填的数跟第t-1个数一样
dp[t][t-1][i][j] += dp[t][i][j][k];// 填第i个位置的数
dp[t][t-1][i][k] += dp[t][i][j][k]; // 填第j个位置的数
dp[t][t-1][j][k] += dp[t][i][j][k]; // 填第k个位置的数
然后每次都有非法的转移;要将非法的转移状态设0。

#include<bits/stdc++.h>
#define pi pair<int,int>
#define mk make_pair
using namespace std;
const int mod = 998244353;
vector<pi> G[110];
int dp[110][110][110][2];
int main()
{int t;scanf("%d",&t);while(t--){int n,m,l,r,x;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) G[i].clear();for(int i=1;i<=m;i++){scanf("%d%d%d",&l,&r,&x);G[r].push_back(mk(l,x));}memset(dp,0,sizeof(dp));int cul = 0;dp[0][0][0][0] = 1;for(int t=1;t<=n;t++){cul ^= 1;for(int i=0;i<=t;i++)for(int j=i;j<=t;j++)for(int k=j;k<=t;k++)dp[i][j][k][cul] = 0;for(int i=0;i<=t;i++)for(int j=i;j<=t;j++)for(int k=j;k<=t;k++){dp[i][j][k][cul] =  (dp[i][j][k][cul] + dp[i][j][k][cul^1]) % mod;dp[i][j][t-1][cul] = ( dp[i][j][t-1][cul] + dp[i][j][k][cul^1]) % mod;dp[j][k][t-1][cul] = (dp[j][k][t-1][cul] + dp[i][j][k][cul^1]) % mod;dp[i][k][t-1][cul] = (dp[i][k][t-1][cul] + dp[i][j][k][cul^1]) % mod;}for(int i=0;i<=t;i++)for(int j=i;j<=t;j++)for(int k=j;k<=t;k++)for(auto tmp : G[t]){int l = tmp.first , x = tmp.second;if((i>=l)+(j>=l)+(k>=l)+(t>=l)!=x)dp[i][j][k][cul] = 0;}}int ans = 0;for(int i=0;i<=n;i++)for(int j=i;j<=n;j++)for(int k=j;k<=n;k++)ans = (ans + dp[i][j][k][cul]) % mod;printf("%d\n",ans);}
}

HDU 6578 Blank 区间dp相关推荐

  1. HDU - 6578 Blank DP + 滚动数组

    HDU - 6578 Blank 题意 给你\(\{0,1,2, 3\}\)四个数,分别填入长度为\(n\)的数列中,有\(m\)个限制条件,\(l_{i}, r_{i}, x_{i}\)表示在\([ ...

  2. Sit sit sit HDU - 5151 (区间dp +组合计数)

    这道这道区间DP,我也开始觉得其实区间DP是一种应用型的思想,做这类题目一个重要的点是在于题目情景的把握,这道题的一个情景就是数学的排列组合问题. 首先应用根据小区间推出大区间的思路,我们可以先固定一 ...

  3. HDU 5115 (区间DP)

    题目大意:你是一个战士现在面对,一群狼,每只狼都有一定的主动攻击力和附带攻击力.你杀死一只狼.你会受到这只狼的(主动攻击力+旁边两只狼的附带攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼 ...

  4. hdu 6578 Blank dp求 给定区间中数字不同的方案数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 给你n个空的数列位置和k条限制,要你用0 1 2 3四个数字,每条限制由l r x组成, ...

  5. HDU 6578. Blank (DP)

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: N个位置,M个限制条件: 每个位置填入{0,1,2,3}中的一个数: 每个限制条件(L,R ...

  6. HDU - 6578 Blank dp

    Blank dp[ o ][ i ][ j ][ k ] 表示前 o 个已经填完, 不同数字的最后一个分别在o, i, j, k, 直接dp, 把限制丢到R, 在R转移出去的时候把不合法的丢掉. #p ...

  7. hdu 6578 Blank dp

    题意 n个格子排成一行,每个格子可以涂四种颜色. 给m个形如(l,r,x)的限制,表示l到r格子内恰好有x种颜色 问满足所有限制的涂色方法有多少种 n<=100,m<=100 做法 dp, ...

  8. hdu 5639(区间dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5693 解题思路:连续消除k个数,可以表示为连续消去了若干次2个数,和若干次3个数.即k = 2*i + ...

  9. HDU 6578 Blank

    题目大意:长度为n的数组要求分别填入0到3四个数中的任意一个,有m个限制条件:区间[l,r]中出现的数字种数恰好为x,求方案数. 记录4种数字最后出现的位置在限制条件下的方案数(及时清零)然后DP. ...

最新文章

  1. 不停机还能替换代码?6年的 Java程序员表示不可思议
  2. 3.3 超参数训练实战:Pandas vs. Caviar-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  3. optee对std smc的处理的详解
  4. 没错,那帮实习生什么都做不好
  5. PL/SQL学习笔记(四)
  6. [转]Oracle update用例
  7. 华为云服务器初探二(完结)
  8. Android开发人员应该知道的一些技术
  9. 使用PaddlePaddle.org工具构建PaddlePaddle文档
  10. Android 登录界面Demo源码
  11. Java中的变量分类_Java十四天零基础入门-Java变量的作用域
  12. maven安装oracle驱动,maven 安装 Oracle 驱动 ojdbc14.jar
  13. 液压传动与气动技术【3】
  14. 关于jsp跳转到servlet显示 “Served at: /JavaWebPractice”或空白页的问题
  15. 2015年微信营销趋势分析与归纳!
  16. cmd中怎么打开计算机,如何打开命令行窗口?电脑打开cmd命令行窗口5大方法详解...
  17. 【力扣】695岛屿的最大面积
  18. Django入门-6:视图-HttpReqeust对象
  19. 深度学习:长短期记忆模型LSTM
  20. linux医学软件,Schrodinger Suites 2015-2 Linux版简单安装经验分享

热门文章

  1. 大数据时代物联网技术发展前景与应用分析
  2. Loki告警的正确姿势
  3. 机器人可操作度 matlab,双臂机器人运动学与可操作性及其优化的研究
  4. 复杂正态分布运用——独立正态分布组合概率、二项分布、泊松分布近似正态分布的运用
  5. linux sendmail漏洞,linux-sendmail的安全-029
  6. ssm基于微信小程序的游泳馆管理系统 uinapp
  7. 0044-【宏基因组】-16S分析qiime1极简教程
  8. 安全警告——“Windows已经阻止此软件因为无法验证发行者”解决办法
  9. 动画对象(lv_anim_t)的应用
  10. “技术让生活更便捷”之腾讯位置服务JavaScript API2.0前端定位和位置标注的开发实录