省選模擬25

2022-10-08 02:54:08 字數 2518 閱讀 3244

今天的題確實是有技術含量,我改到現在才(21:00)改完

以為自己要墊底了,zxb上來就開打,但是我發現第一題並不是很容易做的

於是半個小時之後轉戰第二題,發現是個插頭dp,於是寫完之後就知道自己t飛了

棄掉幹t3,然而只會第乙個部分分,也就是暴力分

能看出來是個揹包,用那個啥啥(庫默爾)定理,得到後面所有選擇是t0的二進位制劃分,與ti是自己

於是我們可以直接做揹包,這樣的話是值域的

我們想要合併揹包,考場上沒有想出來太好的辦法,於是就鴿掉了

發現當前位只會受到這一位的選擇和之前的進製的影響,那麼我們想要記錄最後一位剩下多少並且和後面合併

有一點dp套dp的意思

我們直接記錄最後一位是x的數有多少個數是合法的

但是我們發現這樣記錄好像沒有辦法轉移誒!!???畢竟我們不知道這裡面和別的重複的有多少

於是我們想把最後一位是0~m的都表示出來,而這個任何數的範圍很小(最多進m位好吧),可以二進位制

我們用某乙個二進位制的狀態表示當前狀態下的合法的數有多少個,這樣轉移也是一起轉移,就不怕記重了......

ac_code

#includeusing namespace std;

#define ll long long

#define fo(i,x,y) for(int i=(x);i<=(y);i++)

#define fu(i,x,y) for(int i=(x);i>=(y);i--)

int read()

while(isdigit(ch))

return s*t;

}int t,n,u;ll t[15];

ll f[40][1<<11];

int zy[15][1<<11];

pairok[1<<21];

signed main()

ok[s]=make_pair(ss1,ss2);

}while(t--)

int ss1=ok[buc].first,ss2=ok[buc].second;

if(ss1)f[i+1][ss1]+=f[i][s];

if(ss2)f[i+1][ss2]+=f[i][s];}}

printf("%lld\n",f[35][1]);

fo(i,0,35)fo(s,0,u)f[i][s]=0;

}}

正解竟然是網路流,發現乙個規律,網格圖是可以黑白染色變成二分圖的

並且一般網路流的圖就考慮正著最大和總的減去反著最小......

這個就是總的減去反著最小,我們跑最小費用最大流就好了

ac_code

#includeusing namespace std;

#define fo(i,x,y) for(int i=(x);i<=(y);i++)

#define fu(i,x,y) for(int i=(x);i>=(y);i--)

int read()

while(isdigit(ch))

return s*t;

}const int n=6005;

const int inf=0x3f3f3f3f;

struct ee[n*25];

int head[n*3],rp=1,s=4500*3+1,t=4500*3+2;

void add_edg(int x,int y,int z,int w)

int dis[n*3],pre[n*3],epr[n*3],flo[n*3];

bool vis[n*3];

bool spfa()

}return dis[t]!=inf;

}pairnetflow()

}return make_pair(sum,cos);

}int n,m,jz[155][35],w[155][35];

int all,wll,id[155][35],cid;

bool jud(int x,int y)

signed main()

}fo(i,1,n)fo(j,1,m)

while(isdigit(ch))

return s*t;

}const int n=10005;

int n,k,m;

struct ee[20000000];

int head[n],rp;

void add_edg(int x,int y,int z)

};priority_queueq;

signed main()

fo(i,1,m)

sort(lsh+1,lsh+lh+1);lh=unique(lsh+1,lsh+lh+1)-lsh-1;

fo(l,1,lh-1)fo(r,l+1,lh)

fo(i,1,n)

fo(l,1,lh)

for(int i=head[x];i;i=e[i].nxt)

if(!vis[y])q.push(node),vis[y]=true;}}

printf("yes");

}

省選模擬25

a.環 題意 l個長度為n的恰好有k個1的迴圈同構01串,且滿足s i 將某個1和右側的0交換 s i 1 構造方案。n,l 100,t 10 構造題無思路emm 觀察題目給出了80 的n k互質,可以猜測是有解的充要條件 雖然考場上沒往這想 證明考慮下標和在各自滿足兩個限制下的同余式聯立 互質說明...

考試 省選25

其實貌似t1挺簡單的結果我 ce 了?t1ce的原因是編譯超時。100w個string超時了,50w就沒超。自閉。不合法情況是 n,k not 1 根據上下的1位置的座標和可以知道這件事情。那麼 k 在 mod n 意義下一定存在。對於第 i 個串我們把 frac 全都變成1.然後交換 frac,f...

省選模擬 19 09 11

ps.博主趁資訊課摸魚考的暴零模擬 看門人憑感覺就知道是長鏈剖分,將路徑查分一下,dis u di sv 2 dis lc adis u dis v 2 dis disu disv 2 disl ca 維護fu,if fu,i 表示u的子樹,深度為 i 的點的 dis disdi s最大值 考慮如何...