【題意】 給出,可以理解為a的爸爸是b,現在你要依次輸出每個爸爸的所有兒子,兒子之間按照字典序排序
【思路】 思路不難,用map將爸爸的名字對映成數字,然後建乙個二維vector,兒子push_back到對應爸爸後面,然後排序輸出即可。
【坑點】竟然有重複的,最後三分鐘才發現,有點坑啊!!!也就是a的爸爸是b這句話說了多遍,那麼vector中的元素會有重複,需要去重,當然,直接用set自動去重就行了
【思路】因為要使加油次數最少,顯然要用貪心,每次油不足以到達當前的加油站時,說明前面必須要多加一次油,要加的話肯定是加前面加油站中油量最大的那個,所以用優先佇列維護一下,每次彈出最大值即可
【**】
#include using namespace std;
typedef long long ll;
#define mst(a,b) memset((a),(b),sizeof(a))
#define rush() int t;scanf("%d",&t);while(t--)
const int maxn=1005;
const int inf=0x3f3f3f3f;
const ll mod=998244353;
int n,d,w;
int a[maxn];
string s;
int dis[maxn];
int main()
}dis[n++]=cnt;
//printf("%d\n",n);
dis[0]=0;
dis[n+1]=d;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int ans=0;
priority_queue,less>q;
for(int i=1;i<=n+1;i++)}}
}if(w>=d) printf("%d\n",ans);
else puts("-1");
}
【思路】經典的迷宮問題,只多了乙個傳送門,隨便用什麼東西把兩個傳送門之間連線起來即可,再用bfs廣搜,每次到傳送門的時候乙個方案是向四周走,還有就是走到傳送門的另一側
但是不知道為什麼一直超時87.5,檢查了很久沒有檢查出來qaq
【ps】有dalao提醒了,應該就是因為我走通道的時候沒有vis判斷…
#include using namespace std;
typedef long long ll;
#define mst(a,b) memset((a),(b),sizeof(a))
#define rush() int t;scanf("%d",&t);while(t--)
const int maxn=205;
const int inf=0x3f3f3f3f;
const ll mod=998244353;
int n,m;
int mp[maxn][maxn];
int vis[maxn][maxn];
const int dir[4][2]=,,,};
vector>vec[maxn*maxn];
mapkk;
struct node
now,nex;
int bfs(int sx,int sy)
); //printf("%d\n",mp[0][0]);
while(q.size())
else
//printf("@@%d %d\n",nex.x,nex.y);
}for(int i=0;i<4;i++)}}
//printf("%d %d\n",sx,sy);
printf("%d\n",bfs(sx,sy));
}
【思路】題目模型就是有依賴的樹形dp(揹包),直接利用題目所給關係兩個點之間連邊,但是有可能無法構成一棵樹(若干顆分散的樹),所以引入虛節點作為樹根,將它和其他分散的樹根連線起來(當依賴點為0的時候,用0連向這個點就好)構成一棵樹就可以樹形dp了
用dp[i][j]表示以i為根,用了j個節點的最大值,然後自下向上更新
最終答案就是dp[0][m+1]
【**】
#include using namespace std;
typedef long long ll;
#define mst(a,b) memset((a),(b),sizeof(a))
#define rush() int t;scanf("%d",&t);while(t--)
const int maxn=205;
const int inf=0x3f3f3f3f;
const ll mod=998244353;
int n,m;
int val[maxn];
int dp[maxn][maxn];
vectorvec[maxn];
void dfs(int u)
}for(int i=m;i>=1;i--) dp[u][i]=dp[u][i-1]+val[u];
}int main()
m++;
mst(dp,0);
dfs(0);
printf("%d\n",dp[0][m]);
}
2020 09 06位元組跳動後端
分析 這道題我是用的動態規劃來求解,和傳統的上樓梯問題不同,它多了乙個不能連續走兩步的條件,但我認為沒什麼不同。根據題意,最後一步要麼是2要麼是1,如果最後一步是2,則要考慮不能連續走兩步的限制情況。也就是說,對於乙個已經走到n 2步的人來說,他只能由n 3步走1步得到,而不能由n 4步走兩步得到....
2019位元組跳動實習面試
位元組跳動還是依舊非常注重演算法能力,所以面試過程演算法比重依舊比較大,不知道是不是年前比較缺人的原因,這次面試一共經歷了兩面,而且難度比我去年面試抖音略簡單一下,下面是面試過程的主要題目。1.開始仍舊是常規的自我介紹,接下來重點詢問我在美團實習的經歷,待我將實習內容講解完成以後,主要問我分庫分表按...
9 6 位元組跳動筆試
大概題意 有個樓梯比較高,問有多少種可以方式可以走上去,但有特殊得要求 一是每次可以走一步或者兩步,二是不能連續的走兩步 計算有多少種方法到達頂層 輸入 樓層的層數 輸出 一共有多少種走法 思路 直接dp就好了,設dp方程為dp i 2 dp i 0 表示走一步之後達到第i層,那麼轉移方程就是dp ...