多校第一场第一题,这种类型的dp之前做过两题,状态转移一般是从当前状态往后推的

很经典的dp,不过很卡时间

/*
定义 dp[t][i][j][k]代表填完前 t 个位置后,{0, 1, 2, 3} 这 4 个数字最后一次出现的位置,
排序后为 t, i, j, k(t > i > j > k) 的方案数目,则按照第 t 位的数字的四种选择,可以得
到四种转移。
t选t-1这个位置的数:dp[t][i][j][k]
t选i这个位置的数:dp[t][t-1][j][k]
t选j这个位置的数:dp[t][t-1][i][k]
t选k这个位置的数:dp[t][t-1][i][j]
枚举r[l]==t+1的所有条件,当且仅当满足所有条件时才进行转移 最后的方案数=sum{dp[n]}
总时间复杂度 O(n4)。滚动一维,空间复杂度 O(n3)
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 110
#define ll long long
#define mod 998244353
ll dp[][maxn][maxn][maxn];
int n,m;
struct Node{
int l,x;
Node(){}
Node(int l,int x):l(l),x(x){}
};
vector<Node>v[maxn]; inline void update(ll &a,ll b){
a=(a+b);
while(a>=mod)a-=mod;
}
int c;
void solve(){
c=;
dp[c][][][]=;
for(int t=;t<=n;t++){
c^=;
for(int i=;i<=t;i++)
for(int j=;j<=i;j++)
for(int k=;k<=j;k++)
dp[c][i][j][k]=; for(int i=;i<t;i++)
for(int j=;j<=i;j++)
for(int k=;k<=j;k++){
update(dp[c][i][j][k],dp[c^][i][j][k]);
update(dp[c][t-][j][k],dp[c^][i][j][k]);
update(dp[c][t-][i][k],dp[c^][i][j][k]);
update(dp[c][t-][i][j],dp[c^][i][j][k]);
}
for(int p=;p<v[t].size();p++){//枚举每个条件
int l=v[t][p].l,x=v[t][p].x;
for(int i=;i<t;i++)
for(int j=;j<=i;j++)
for(int k=;k<=j;k++){
int cnt=;
if(i>=l)cnt++;
if(j>=l)cnt++;
if(k>=l)cnt++;
if(cnt!=x)dp[c][i][j][k]=;
}
}
}
} int main(){
//ios::sync_with_stdio(false);
int t;cin>>t;
while(t--){
for(int i=;i<maxn;i++)v[i].clear(); scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
int l,r,x;
scanf("%d%d%d",&l,&r,&x);
v[r].push_back(Node(l,x));
}
solve();
ll ans=;
for(int i=;i<n;i++)
for(int j=;j<=i;j++)
for(int k=;k<=j;k++)
ans+=dp[c][i][j][k],ans%=mod;
cout<<ans<<'\n';
}
}

线性dp——hdu6578经典dp的更多相关文章

  1. UVA 10405 Longest Common Subsequence --经典DP

    最长公共子序列,经典问题.算是我的DP开场题吧. dp[i][j]表示到s1的i位置,s2的j位置为止,前面最长公共子序列的长度. 状态转移: dp[i][j] = 0                 ...

  2. HDU 1003 Max Sum --- 经典DP

    HDU 1003    相关链接   HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...

  3. poj1458 求最长公共子序列 经典DP

    Common Subsequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 45763   Accepted: 18 ...

  4. UVA 674 Coin Change 换硬币 经典dp入门题

    题意:有1,5,10,25,50五种硬币,给出一个数字,问又几种凑钱的方式能凑出这个数. 经典的dp题...可以递推也可以记忆化搜索... 我个人比较喜欢记忆化搜索,递推不是很熟练. 记忆化搜索:很白 ...

  5. 搬寝室(经典dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1421 hdu_1421:搬寝室 Time Limit: 2000/1000 MS (Java/Othe ...

  6. 命运(经典dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2571 命运 Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  7. 牛客练习赛 26 B题 烟花【DP】(经典)

    <题目链接> 题目描述 小a有个烟花,每个烟花代表着互不相同的颜色,对于第个烟花,它有的概率点燃,现在小a要去点燃它们,他想知道产生颜色的期望个数 及 产生恰好产生种颜色的概率 输入描述: ...

  8. NYOJ - 矩形嵌套(经典dp)

    矩形嵌套时间限制:3000 ms | 内存限制:65535 KB 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b< ...

  9. 51nod 1412 AVL树的种类(经典dp)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1412 题意: 思路: 经典dp!!!可惜我想不到!! $dp[i][k] ...

随机推荐

  1. spring framework三个版本的下载包区别

    docs:该文件夹下包含Spring的相关文档.开发指南及API参考文档:dist:该文件夹下包含Spring jar包.文档.项目等内容:schema:里面包含了Spring4所用到的xsd文件:

  2. MyBatis 传递多个参数的几种方法

      简介: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简 ...

  3. Mybatis调用Oracle中的存储过程和function

    一.Mybatis调用存储过程 1 在数据库中创建以下的存储过程create or replace procedure pro_hello(p_user_name in varchar2,p_resu ...

  4. Magento笔记/记录(1)

    1.Magento eav_attribute表中source如何指定自定义数据来源  如果你引用的类名为yebihai_usermanage_model_entity_school你必须完整的给出地 ...

  5. 在IntelliJ IDEA中新建Maven项目

    在IntelliJ IDEA中新建Maven项目,选择“File->New->Project”,创建一个简单项目,不选择模板,如下图所示: 2 选择“Maven”,不需要使用内置结构(模板 ...

  6. sql delete语句

    如果要删除数据库表中的记录,我们可以使用DELETE语句. DELETE语句的基本语法是: DELETE FROM <表名> WHERE ...; 例如,我们想删除students表中id ...

  7. PHP ftp_chmod() 函数

    定义和用法 ftp_chmod() 函数设置 FTP 服务器上指定文件的权限. 如果成功,该函数返回新的权限.如果失败,则返回 FALSE 和一个警告. 语法 ftp_chmod(ftp_connec ...

  8. java中获取类加载路径和项目根路径的5种方式分析

    package my; import Java.io.File; import java.io.IOException; import java.net.URL; public class MyUrl ...

  9. Shiro学习(8)拦截器机制

    8.1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3.1规范>http://www.iteye.com ...

  10. 探索C++的秘密之详解extern

    转载:http://developer.51cto.com/art/200704/46843.htm C和C++对函数的处理方式是不同的.extern "C"是使C++能够调用C写 ...