a
給你兩個序列ai,
bia_i,b_i
ai,bi
,然後讓你兩兩配對相加,使得最大值最小。
貪心。乙個從大到小排,乙個從小到大排,直接相加。
b給你乙個01字串,然後讓你找到最多的組,滿足每一組都有0和1。
貪心。從前往後掃。遇到0和1是立馬累加,
思路:一開始想得是每次挑出行和列中的最大值,然後累加,沒有過,很納悶,然後想出了一組資料證明了直接挑選最大值不一定正確,因為可能有好幾個最大值。
2 2 2
2 1 3
1 1 1
做法:我們一共會選k
kk次,我們列舉會從行中選多少次,加入選i
ii次,那麼從從列中選k−i
k-ik−
i次。每次選的時候我們在行/列中都選和最大的那個累加,然後更新下。取最大值即可。
int n,m,k;
int w[20]
[20];
ll x_[20]
,y_[20]
;ll x[20]
,y[20];
intmain()
ll ans =0;
for(
int i =
0;i <= k;
++i)
rep(j,i+
1,k)
ans =
max(ans,m);}
cout << ans;
}
可以列舉在行中取的情況,二進位制列舉即可。不過要特判k
>=n
∣∣k>=m
k>=n||k>=m
k>=n
∣∣k>=m
這種情況。
思路:dp。
好題啊!!!
我當時思路只想到了bfs,而且並不好寫,估計寫出來也超時。
首先分析下,
右邊為0
00的話可以走過去;否則下邊為0的時候可以走過去;否則,左邊為0走過去,這個時候發現騰出的位置又為0了,下一次又走過去,走回來,這是沒有意義的,所以不往左走。然後分析往上走,這是說明不能往右走,說明他剛剛往右走到這裡的,或者往下到這裡的,因為往左走會造成反覆橫跳,往上走有走回去了,所以也不能往上走。
只有往右走和往下走是有意義的,經典棋盤型dp。
設d p[
i][j
]dp[i][j]
dp[i][
j]是到這裡所設障礙最小。
然後考慮dp[
思路:預處理這個n
nn個數,對於a
ia_i
ai,進行分解因數,然後為每個因數開乙個vector,儲存下標i
ii,代表著這個因數是a[i
]a[i]
a[i]
的因子。
然後給定查詢l,r
,xl,r,x
l,r,
x我們列舉x
xx的因數,然後二分判斷是否在[l,
r][l,r]
[l,r
]這個區間內有它的倍數,每次取最大值。
vector<
int> q[n]
;int a[n]
;void
init
(int n,
int id)}}
intsolve
(int x,
int l,
int r)
intmain()
int l,r,x;
rep(i,
1,q)
}printf
("%d\n"
,ans);}
}
牛客練習賽58 F
求帶單點修改的樹上兩點間任意子路徑長異或和。路徑長等於路徑上所有異或和。簡單模擬一下,可以發現。奇數情況下,答案是偶數點異或和。偶數情況下,就是正常的異或和。偶數點異或和也很容易處理。分深度奇偶樹狀陣列即可。但是這是對於鏈的,不能直接dfs dfsdf s序,需要剖分一下。但是我不會,所以去學了一下...
牛客練習賽58 D 迷宮
乙個n m迷宮,迷宮中每個格仔用0或1表示,0表示該格仔可以通過,1表示該格仔是個障礙物,牛妹站在格仔 1,1 出口在格仔 n,m 牛妹想要走出迷宮,但牛妹只會按以下策略走 牛妹當前所在的格仔稱為當前格仔 如果當前格仔右邊沒有障礙物,牛妹就向右走,否則轉到2。如果當前格仔下方沒有障礙物,牛妹就向下走...
牛客練習賽58 D 迷宮
題目鏈結 有乙個n m迷宮,迷宮中每個格仔用0或1表示,0表示該格仔可以通過,1表示該格仔是個障礙物,牛妹站在格仔 1,1 出口在格仔 n,m 牛妹想要走出迷宮,但牛妹只會按以下策略走 牛妹當前所在的格仔稱為當前格仔 1.如果當前格仔右邊沒有障礙物,牛妹就向右走,否則轉到2。2.如果當前格仔下方沒有...