mirror 省選模擬賽

2021-08-17 17:53:35 字數 1365 閱讀 1163

標籤:狀壓dp

結論:當最優情況下,每行每列鏡子的個數都為偶數

題目可以轉化為擺放鏡子,使得格仔中產生的光環最長

所以不需要考慮鏡子到底放什麼方向

於是我們直接狀壓一列鏡子當前的奇偶性進行轉移

時間複雜度o(

4n∗n

∗m2)

o (4

n∗n∗m2)

#include

#include

#include

#include

#include

#include

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define dep(i,a,b) for(int i=a;i>=b;i--)

#define ll long long

#define mem(x,num) memset(x,num,sizeof x)

#define reg(x) for(int i=last[x];i;i=e[i].next)

using namespace std;

inline ll read()

while(ch>='0'&&ch<='9')

return

x*f;

}//**

****

****head by yjjr**

****

****

#define inf 1e9

const int maxn=(1

<<10)+6;

char st[26][26];

int n,m,h[maxn],cnt[maxn],f[maxn][200],g[maxn][200],ans[maxn];

int main()

if(x==1)h[sta]=-inf;else h[sta]=t;

}rep(sta,0,(1

<1)cnt[sta]=cnt[sta>>1]+(sta&1);

rep(sta,0,(1

<0,n*m)f[sta][i]=-inf;

f[0][0]=0;

rep(j,1,m)}}

rep(i,0,n*m)ans[i]=f[0][i];

rep(i,1,n*m)ans[i]=max(ans[i],ans[i-1]);

rep(i,0,n*m)printf("%d ",4

*n*m-2

*ans[i]);printf("\n");

return

0;}

省選模擬賽 project

最小割問題。建如下邊 s,i,ai 代表選用a語言編寫第i個專案 i,t,bi 代表選用a語言編寫第i個專案 其後注意要反向連邊 i,j,d 代表選用b語言編寫第i個專案,選用a語言編寫第j個專案 j,i,c 代表選用a語言編寫第i個專案,選用b語言編寫第j個專案 litc學長出的題,引文最小割題目...

Sequence 省選模擬賽

標籤 貪心 給定乙個整數數列 a,定義f a max1 inaj aif a max1 i naj ai 保證 f a 0。你需要求出至少需要修改 a 的多少個位置才能使 f a 變小。注意,你修改之後的數也必須是整數。2 n 106 ai 109 2 n 106 ai 109 簽到題gg,自己真的...

省選模擬賽 環

分析 不算太難的一道題.如果把每個編號i看作乙個點,i向ai連邊,那麼最後一定會出現環,並且環與環之間是不相交的.那麼我們可以dfs預處理出所有的環,用詢問的m除以環的長度,剩下的餘數就可以o 1 計算了,時間複雜度o n 上面這種做法在處理餘數部分時比較容易寫錯.一種不容易寫錯的方法是倍增.複雜度...