第一題: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\)
正解應該輸出4,但是上面的**卻輸出6#includeusing namespace std;
開始的,所以我們不能只從狀態為const int maxn=5;
int f[1因為我們的狀態不是從0
0
正著開始列舉比如下面這一組資料
bbbb
bwwb
bwwb
bbbb
解決這乙個問題,我們倒著列舉一遍就可以了
#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互素的數的個數。思...