題目描述
小a正在玩一款星際探索遊戲,小a需要駕駛著飛船從1號星球出發前往n號星球。其中每個星球有乙個能量指數p。星球i能到達星球j當且僅當pi>pj。
同時小a的飛船還有乙個耐久度t,初始時為1號點的能量指數,若小a前往星球j,那麼飛船的耐久度會變為t⊕pj(即t異或pj)
小a想知道到達n號星球時耐久度最大為多少
注意:對於每個位置來說,從它出發可以到達的位置僅與兩者的p有關,與下標無關
第一行乙個整數n,表示星球數
接下來一行有n個整數,第i個整數表示pi
乙個整數表示到達n號星球時最大的耐久度
若不能到達n號星球或到達時的最大耐久度為0則輸出−1
3 457 456 23
478
1⩽n,∀pi⩽3000
是不是全世界都想到了dp就我只想到了dfs?!!!!!
(痛楚我興奮,停下我無法)
1.0版本時有可能有忽略的地方,同時可能牛客資料太弱,上去一發就過了ヽ(・_・;)ノ
由於是因為這道題總是a不掉造成的弱分,很不開心,所以當即更了一篇,直接把當時用來a掉**貼上來了(資料更新後當然就過不了了)
這個題我後來了解到似乎有用dfs做出來的dalao們,但是由於不曉得如何剪枝,我碼的dfs通通超時,所以只好用dp
輸入之後首先判斷是否可以到達n號星球(即p[1]>p[n]是否成立)
如果成立令其作為初始值(可以保證至少可以登上該星球,並且若其他星球都登不上去,這也是最終值)
接下來是整理資料,將裡面無法從1星球登上的、無法登上n星球的進行刪除
(ps:如果可以的話,把重複資料刪除更加省時)
接下來進行從大到小的排序(整理資料之後就是星球1最大,星球n最小了)
然後就是動態規劃問題了,動態規劃中與找最大值(同時保證資料一定大於0)
#include#include#includeusing namespace std;
int m;
int a[13010],b[13010];
int dp[13010];
bool cmp(int a, int b)
int main()
if(b[1] <= b[m])
int ans = b[1] ^ b[m];
int n = 0;
for(int i=1; i<=m; i++)
sort(a+1, a+1+n, cmp);
dp[ans] = 1;
int maxx = ans;
for(int i=1; i<=n; i++) }}
printf("%d\n", maxx);
return 0;
}
牛客寒假訓練營4 F
題目傳送門 這個題其實是一道送分題 可是我被卡在神 gai 奇 si 的e題上了,沒有時間寫這個水題了 e題是如此的神 e 奇 xin 以至於我實在是不想給它單獨寫一篇總結 不就是乙個貪心 高精 讀一遍題,稍稍畫圖看一下就知道是要你求樹上有幾對點之間的距離為偶數在稍微觀察一下就能發現,深度為奇數的節...
牛客寒假訓練營5 F
題目傳送門 又到了開心的2小時過6題三小時卡一題的環節 太菜了 qwq 這一切一切的原因是什麼呢?ta這個小 zhi 機 zhang 靈 er 鬼 tong 把這句話看丟了 首 du 見 cuo 這道題的ta就很興奮的認為這不就是乙個組合數嘛 然後就寫了半天組合數 對dp的敏銳程度還不夠 寫組合數就...
牛客暑期多校訓練營B Boundary
給定n個點,然後確定乙個過原點的圓,要使這n個點盡可能多的存在與圓上,最後輸出最多的存在於圓上的點的個數 三點確定乙個圓,我們已知這個圓必定經過原點,所以再依次利用三點求圓心的公式列舉每兩個點與原點 三點不共線 確定的圓心,最後選擇確定次數最多的圓心構成的圓 include include incl...