牛客演算法周周練7 題解

2022-07-16 21:51:27 字數 2345 閱讀 6987

a - 收集紙片

題意:

在二維座標中有$n$個點需要你依次到達並最後返回起點,求最短路程

思路:

典型的$tsp$旅行商問題,因為$n$最大只有$10$,所以我們可以用$dfs$遍歷所有可能的情況,時間複雜度為$o(10!)$

#include#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

typedef

long

long

ll;

intx,y,sx,sy,n,ans;

int vis[11];

struct

nodea[

11];

void dfs(int cnt,int num,int

dis)

for(int i=1;i<=n;i++)

} }

intmain()

cout

<

the shortest path has length "}

return0;

}

view code

c -  rabbit的工作(1)

題意:

一共有$n$天,如果連續工作第$i$天需要耗費精力$i$,同時根據安排你也可以休息,不消耗精力,在消耗精力小於等於$k$的情況下,問你最多能工作幾天

思路:

定義$dp[i][j][k]$為,過去$i$天,當前已經連續工作$j$天,總計工作$k$天需要消耗的精力

如果選擇休息則狀態轉移方程為$dp[i+1][0][k]=min(dp[i][j][k],dp[i+1][0][k])$

在可以工作的情況下,轉態轉移方程為$dp[i+1][j+1][k+1]=min(dp[i+1][j+1][k+1],dp[i][j][k]+(j+1))$

最後,因為記憶體限制,第一維可以用滾動陣列節約空間

#include#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

const

int n=405;

int dp[2

][n][n];

strings;

intmain()

}now^=1

; }

for(int i=0;i<=n;i++)

}cout

<

return0;

}

view code

d - 華華和月月逛公園

題意:

給一張$n$個點$m$條邊的無向圖,讓你求出非關鍵邊的個數,非關鍵邊的定義為去掉這條邊後,依舊可以從$1$號點出發,到達圖中所有點

思路:

轉換題意後,就是求非橋邊的個數,直接套用$tarjan$求橋的模板即可

#include#include

#include

using

namespace

std;

const

int maxn=1e5+10

; vector

a[maxn];

int ans=0

,vis[maxn];

void dfs(int tim,int fa,intu)

dfs(tim+1

,u,v);

} }

intmain()

dfs(

1,1,1

); cout

}

view code

e - 數字比較

題意:

給兩個數字$x$與$y$,比較$x^$跟$y^$的大小

思路:

將$x^$跟$y^$化成冪次相同的形式,在比較兩數的底數大小即可

#include#include

using

namespace

std;

typedef

long

long

ll;

intmain()

else

}

view code

牛客演算法周周練2

a 題意 求乙個數的順序和逆序之和。題解 其實就是個閹割版的高精度加法嘛。其實逆序數忽略前導零這個條件是沒有用的,因為順序數不可能有前導零,自然結果也不會有,然後注意下首位進製不取餘。include using namespace std int a 10 b 10 intmain for k j ...

牛客演算法周周練2

題目鏈結 include define sc x scanf lld x define pf printf define rep i,s,e for int i s i e i define dep i,e,s for int i e i s i using namespace std typede...

牛客演算法周周練3

只寫了乙個,打遊戲去了 就是個搜尋模板,直接寫就行 include include include include include include using namespace std define mid 1000000007 typedef long long ll int book 106 ...