2020.10.18:yc中學模擬賽
(難度介於csp-j2~csp-s2)
傳送門
水題,但寫sort人傻了,忘了sort是左閉右開的結構,導致陣列沒排完序 (分數-40)
題意就是將n件物品2個一組,讓求組數最少時,每組價值差盡量小
具體怎麼做呢?
考試的時候,我是一開始想到的是用最小價值的物品和最大價值的物品相加,次小和次大相加,第k小的和第k大的相加,這樣必定每組價值差最小
但如果某兩數之和大於價值上限怎麼辦?
所以進行判斷,單獨取出這兩個數中較大的乙個,獨成一組;而較小的乙個參與與其他數字的合併
這是滿足貪心的思想的
#includeusing namespace std;
int mx;//每組紀念品**之和的上限
int n;//購來的紀念品的總件數
int a[30100];
int ans;
int main()
sort(a,a+n+1);
int l=1,r=n;
while(l<=r)else
}cout順便插一句,sort一類的stl都是左閉右開的結構
左閉右開:一種區間結構
(開區間):區間兩處的端點值取不到
[閉區間]:區間兩處的端點值可以取到
所以,我就是忘了sort是左閉右開的那個人,然後就給下標0~n-1的資料排序,唯獨沒到下標n
sort(a,a+n);
傳送門就是有n個點m條邊,然後看這些點邊構成了多少個集合,最後-1(看需要連多少條邊)就好了
我想的是用並查集來做 (就構建集合,然後查詢,比並查集模板還簡單 )
也沒什麼說的,就將每個點掛到自己的根節點上
最後隨便數一下有多少個根節點就完成
不會並查集的同學請看看這篇文章:【並查集】一種與時間賽跑的巧妙演算法
以及學習並查集請必需掌握的鏈式前向星:關於路徑儲存的常見優化——前向星與鏈式前向星
#includeusing namespace std;
int n,m;//n個城,m條路
int fa[100100];
int find(int i)
else
}int main()
long long ans=0;
for(int i=1;i<=n;i++)
} ans--;
cout<傳送門
就是一張nm的地圖,為障礙物,求奶牛t步內從[sx,sy]到[ex,ey]的方案數
我最開始打了個dfs搜尋,以為t<=15資料能過
#includeusing namespace std;
int n,m,t;
char a[110][110];
int sx,sy,ex,ey;
int dir[4][2]=,,,};
bool vis[110][110];
int ans;
bool in(int x,int y)
//cout<>n>>m>>t;
for(int i=1;i<=n;i++)
} cin>>sx>>sy>>ex>>ey;
dfs(sx,sy,0);
cout下來大佬yja告訴我,這樣時間複雜度高達約o(4^k)(4個方向,可以走t步,最壞約為10 ^9)
所以我們進行記憶化
以及,我們還要考慮目前所在的點和終點間的距離(這裡用曼哈頓距離進行估價,即|x1-x2|+|y1-y2|) 是否大於t-走過的步數
(即:|x1-x2|+|y1-y2|<=t-z)
若大於那麼從起點走t次後一定無法到達終點,所以後面一切均為無用功,直接結束本次搜尋(可行性剪枝)
可以用記憶化就可能能用dp
dp有個好處就是可以不進行可行性剪枝
而改用三維陣列,某一維記錄當前步數
在t步內,到達[i,j]方案數為上下左右除去障礙物的和
然後判斷是否越界等基本操作,給f[sx,sy]賦初值=1
f[i][j][k]表示第k時間到達(i,j)的方案數,得到:f[x][y][k]+=f[x+dir[0][i]] [y+dir[1][i]] [k+1]
//dir表方向變化
dp
#includeusing namespace std;
int n,m,t;
int sx,sy,ex,ey;
char a[110][110];
int f[110][110][110];
int dir[4][2]= ,,,};
bool in(int x,int y)
} cin>>sx>>sy>>ex>>ey;
f[sx][sy][0]=1;
for(int i=1; i<=t; i++) }}
}} }
cout傳送門
線段樹,暫時不太懂
略......
考試的時候暴力,a了兩組資料,其他超時
//a兩組資料
#includeusing namespace std;
long long n;
long long a[10100];
long long ans;
int main()
cout<<0
if(y>k)y=k;
if(y>x)
}} cout<
} return 0;
}
YC創業課的總結
上個月,參加了笑來老師組織的yc創業課,第一次通過這樣的20課,課程,看著 他的筆記,我徹底明白了,就是寫下來特別重要,是對自己對思路乙個總結,寫出來後,再把說出來,這樣才能把東西真正的思考出來。讀了很多書,但是發現自己的表達能力,以及說故事的能力確實很差,這就是自己下一步需要去實踐,提高的地方吧。...
2020 10 18 v 常見指令
寫在前面 利用腳手架搭建乙個vue專案,然後開始學習。過程省略 正式內容 現代開發模式 傳統開發模式 代表vue react jquery 特點20 表現層 80 表現層 現代開發模式的代表就是vue react,與傳統開發模式的大部分精力在class和樣式中,vue只有20 的表現層 核心在資料層...
2020 10 18 動態規劃(最長回文子串)
就在這裡記錄一下動態規劃。動態規劃的關鍵點就是小問題和大問題的聯絡。用乙個遞迴表,更容易理解。對於這個題,遞迴函式中,如果i j,必然是回文,如果i j 1,只需要比較這兩個位置的值是否一樣,否則,就需要遞迴比較內部的字串。以abccbd作為例子,最開始是f 0 0 f i j 指s.substri...