0x02 枚举模拟递推
Posted AKCqhzdy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0x02 枚举模拟递推相关的知识,希望对你有一定的参考价值。
1、TYVJ1266(这站是不是已经倒闭了啊) USACO陈年老题,对于这种开关问题啊,最多只按一次,而且第一行随便按完下面的就全确定了,类似的还有固定翻转一个长度的区间,这个也是最多翻一次的而且翻的次数为n-L
2、POJ1958 四塔的汉诺塔问题。但是好像是弱化的二维DP递推,马马虎虎吧
3、bzoj1218 陈年老题,二维前缀和+老古董套路容斥
4、POJ3263 有点意思的题,假如我做的话就会强行差分约束,但是我不能确定类spfa的做法能否满足。正解是对于两个个可以相互看到的点,当然先是看作一个约束条件,他们之间的点一定比他们要至少小1。那么就是区间修改-1,用差分数组。(想到GDOI左老师的题,不定区间用差分转化)
这题还有个小点要注意。
对于两个约束区间,要么是包含关系,要么是不相交,否则矛盾。
细节还挺多
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> #include<map> using namespace std; map<int,bool>mp[11000]; int c[11000]; int main() { int n,T_T,H,Q; scanf("%d%d%d%d",&n,&T_T,&H,&Q); while(Q--) { int l,r; scanf("%d%d",&l,&r); if(l>r)swap(l,r); l++,r--; if(r>=l&&mp[l][r]==false) { mp[l][r]=true; c[l]--;c[r+1]++; } } for(int i=1;i<=n;i++) c[i]+=c[i-1], printf("%d\n",H+c[i]); return 0; }
以上是关于0x02 枚举模拟递推的主要内容,如果未能解决你的问题,请参考以下文章
HRBUST 1211 火车上的人数数论解方程/模拟之枚举+递推