第一次打牛客直接。。。
y1s1牛客的評測系統真的慢,搞得我不想交
題目鏈結
首先先對陣列a
逆序貪心可得val
(i,j
)=a1
+a2+
⋯+ai
×j
val(i,j)=a_1+a_2+\dots+a_
val(i,
j)=a
1+a
2+⋯
+ai×
j嘗試證明:分析可知我們最終會選擇i×j
i×ji×
j個陣列a
的數,貪心肯定每個數選的越大越好,嘗試每一組的前j
jj大的數都是陣列中前i×j
i×ji×
j大的數的子集,即可將原陣列分成i
ii個部分選出前i×j
i×ji×
j大。
#include
#include
using
namespace std;
const
int n=
100010
;typedef
long
long ll;
ll a[n]
,s[n]
;int n;
int x,y;
intmain()
題目鏈結
對於乙個連通圖,嘗試去掉一些邊,但是最終保證圖連通而且留下的邊盡量的大,如果我們用kurskal求最大生成樹剛好滿足上述需求。我們在求dis
t(u,
v)
dist(u,v)
dist(u
,v)時,只走最大生成樹上的邊一定能保證dis
t(u,
v)
dist(u,v)
dist(u
,v)最大。選擇排列時,對於每條邊最少都要經過一次,答案一定不會超過最大生成樹上的邊權和。嘗試構造一種解使得答案等於最大生成樹上的邊權和:依次選擇最小的邊的兩個點,然後把這條邊刪去(意思為不能再次選擇該邊),這樣構造即可構造出最優答案。
#include
#include
using
namespace std;
typedef
long
long ll;
const
int n=
500010
;struct node
}e[n]
;int n,m;
int p[n]
;int
find
(int x)
intmain()
} cout
}
補完2題,發現牛客的思維難度還是挺高的,如果能夠推出結論,還是挺好寫**的,以後要多練練這種思維+演算法題目。
剛開始看還以為是個數論題數論渣渣不想看數論,其實是個dp
狀態表示:f[i
][j]
[0/1
]f[i][j][0/1]
f[i][j
][0/
1]表示對於前i
ii個人選擇j
jj個增加d
dd 並且不選/選擇第i
ii個人
狀態計算:
f [i
][j]
[0]=
f[i−
1][j
][0]
+(a[
i−1]
+d≤a
[i])
f[i−
1][j
][1]
f[i][j][0]=f[i-1][j][0]+(a[i-1]+d \leq a[i])f[i-1][j][1]
f[i][j
][0]
=f[i
−1][
j][0
]+(a
[i−1
]+d≤
a[i]
)f[i
−1][
j][1]f[
i][j
][1]
=f[i
−1][
j−1]
[0]+
f[i−
1][j
−1][
1]
f[i][j][1]=f[i-1][j-1][0]+f[i-1][j-1][1]
f[i][j
][1]
=f[i
−1][
j−1]
[0]+
f[i−
1][j
−1][
1]很多dp概率實質都是算方案數,然後借用階乘和逆元算答案。
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int n=
5010
;const ll mod=
998244353
;ll a[n]
,d;ll f[2]
[n][2]
;// f[i][j][0/1] 表示對於前i個人選擇j個增加d 並且不選/選擇第i個人
int n;
ll fact[n]
,infact[n]
;ll qmi
(ll a,ll b,ll p)
return res;
}void
init
(int n)
}int
main()
}for
(int i=
1;i<=n;i++
)}
要加油哦~ 牛客練習賽69 B
題意 給定n nn個數,乙個x xx表示可以劃分成最多x xx個串,乙個y yy表示在乙個串中最多選擇y yy個數。最後求 i 1x j 1yv al i j sum x sum yval i,j i 1x j 1 y va l i,j v al i,j val i,j val i,j 為 將n n...
牛客練習賽69 D 火柴排隊
長度為 n nn 序列 a aa 中找出 k kk 個數加 d dd,使新序列中如果 ai aj a i a j ai aj 那麼原序列也 a i aj a i a j ai aj 的概率。對於每個 1 k n 1 le k le n 1 k n,你都要輸出其對應的答案,答案模 998244353 ...
牛客練習賽9
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...