6 28集訓 集訓模擬賽2

2022-01-10 18:16:26 字數 1752 閱讀 1462

第一題:n只有4,直接暴力

第二題:tarjan縮點之後跑乙個最長路

第三題:dp

第四題:思維量較大

\(n\)的範圍很小,所以我們考慮狀壓dp

我們設\(f[i][j][k][m]\)為第一行的狀態為\(i\),第二行的狀態為\(j\),第三行的狀態為\(k\),第四題的狀態為\(m\)所需要的最小步數

所以我們暴力列舉6重迴圈,時間複雜度為\(15 \times 15 \times 15 \times 15 \times 4 \times 4\)

#includeusing namespace std;

const int maxn=5;

int f[1因為我們的狀態不是從0

開始的,所以我們不能只從狀態為0正著開始列舉

比如下面這一組資料

bbbb

bwwb

bwwb

bbbb

正解應該輸出4,但是上面的**卻輸出6

解決這乙個問題,我們倒著列舉一遍就可以了

#includeusing namespace std;

const int maxn=5;

int f[1<=0;i--)b[maxn],b2[maxn];

void ad(int aa,int bb,ll cc)

int h2[maxn],t2=1;

void ad2(int aa,int bb)

int dfn[maxn],low[maxn],dfnc,sta[maxn],top;

int js,shuyu[maxn],siz[maxn];

ll a[maxn],ans[maxn];

void tar(int xx) else if(!shuyu[u])

}if(dfn[xx]==low[xx])

top--;

shuyu[xx]=js;

siz[js]++;

}}queueq;

int vis[maxn];

ll dis[maxn];

void spfa(int xx)

for(int i=1;i<=n;i++) a[maxn];

bool cmp(const node &a, const node &b)

}sum=0;

while(!q.empty()) q.pop();

for(int i=c;i>=c-n/2+1;--i)

//g[i]:表示以i為中位數後n/2人的最低獎金

for(int i=c-n/2;i>=1;--i)

}//中位數的取值範圍是[n/2+1,c-n/2]

//因為要求最大中位數,所以倒序

for(int i=c-n/2;i>=n/2+1;--i)

if(a[i].w+f[i]+g[i]<=f)

printf("-1\n");

}int main()

集訓模擬賽2

題目描述 這裡 b 表示該格仔放的物件黑色面朝上 w 表示該格仔放的物件白色朝上。如果我們選擇翻轉第三行的第乙個物件,那麼格仔狀態將變為 bwbw bwww wwwb wwwb 遊戲的目標是翻轉到所有的物件白色朝上或黑色朝上。你的任務就是寫乙個程式來求最少的翻轉次數來實現這一目標。輸入格式 輸入檔案...

2018 3 26集訓 yja 偽模擬退火

在平面上找 n 個點,要求這 n 個點離原點的距離分別為 r 1,r 2,cdots r rn 最大化這 n 個點構成的凸包面積,凸包上的點的順序任意。注意點不一定全都要在凸包上。n leq 8,r i leq 1000 正解是拉格朗日乘數法。然而作為乙隻蒟蒻,當然是不會這種巧妙的操作的。那就亂搞吧...

8 1 集訓日記

今天看了有關容斥原理的幾篇部落格。容斥原理的基本思想是 先不考慮重疊的情況,把所有物件的數目求出,然後再把計數時重複計算的數目排斥出去,使得計算的結果既無遺漏又無重複。首先是乙個經典的互素問題 hdoj 4135 co prime 題目大意是 給定a,b,n,求區間 a,b 中與n互素的數的個數。思...