2018.12.01【NOIP提高组】模拟A组 & B组

T1:

T2:简单题,不说了。

T3:设f[i][j]表示前i个位置填1~i,并且第i个位置填j的方案数。

那么考虑求f[i][j]。在第i个位置填j,就相当于把先前1~i-1中大于j的数加1,然后再把j填在i位置上,而且i-1位置上填的数要满足与j的关系。于是便有了转移方程:

f[i][j]=sum(f[i-1][k])(k

f[i][j]=sum(f[i-1][k])(k>=j)(a[i-1]='D')

a[i-1]='?'的情况就是把两个加起来,最终答案就是f[n]。

 

总结:在做这种有关排列的问题时一般都是考虑已经处理好1~i时的方案数,因为这样不仅可以在最终统计出1~n的排列的答案,还方便处理大小关系。

 

T4:首先有一个性质:若i位置被操作了,那么i后面所有的小于i的位置都会被改变,那么从此往后在这些位置的操作就没有意义了。于是我们可以用线段树处理出每一个位置最先改变的时刻。当一个位置被改变是答案就要减去以这个位置为左端点的逆序对的个数,这个也可以预处理。至此这道题就做出来了。

你可能感兴趣的:(【NOIP提高组】模拟A组)