1. 程式人生 > >0x02 枚舉、模擬、遞推

0x02 枚舉、模擬、遞推

-- ID 包含關系 條件 cli ring 而且 als tyvj

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; }
POJ3263

0x02 枚舉、模擬、遞推