2023年計蒜客初賽第六場 微軟的員工福利(中等)

2021-07-14 16:51:56 字數 1747 閱讀 6820

題解:dp(i,u)表示第i個人選第u個顯示器為根的子樹得到的最大值。然後去列舉i和他二子的最大值和最小值就可以了。

時間複雜度為o(n^3)

**:

#include#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long

#define pb push_back

#define pa pair#define clr(a,b) memset(a,b,sizeof(a))

#define lson lr<<1,l,mid

#define rson lr<<1|1,mid+1,r

#define bug(x) printf("%d++++++++++++++++++++%d\n",x,x)

#define key_value ch[ch[root][1]][0]

#pragma comment(linker, "/stack:102400000000,102400000000")

const ll mod = 1000000007;

const int n = 100+15;

const int maxn = 8e3+15;

const int letter = 130;

const ll inf = 1e18;

const double pi=acos(-1.0);

const double eps=1e-10;

using namespace std;

inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}int n;

ll p[n][2],dp[n][2];

int vis[n];

vectorg[n],g[n];

stacks;

queueq;

void bfs(int y)

for(int i=1;i<=n;i++)g[i].clear();

int x,y;

for(int i=0;idp[y][1]-p1) dp[x][pd]=dp[y][0]-p0+p[x][pd];

else dp[x][pd]=dp[y][1]-p1+p[x][pd];}}

else

if(min1<=p[e][0]&&p[e][0]<=max1) vs=dp[e][0];

if(min1<=p[e][1]&&p[e][1]<=max1) vs=max(vs,dp[e][1]);

ans+=vs;

}if(!flag) continue;

dp[x][pd]=max(dp[x][pd],ans+p[x][pd]);}}

for(int pd=0;pd<2;pd++)

if(min1<=p[e][0]&&p[e][0]<=max1) vs=dp[e][0];

if(min1<=p[e][1]&&p[e][1]<=max1) vs=max(vs,dp[e][1]);

ans+=vs;

}if(!flag) continue;

dp[x][pd]=max(dp[x][pd],ans+p[x][pd]);}}

}}

printf("%lld\n",max(dp[1][0],dp[1][1]));

return 0;

}

2019 計蒜之道 初賽 第六場

a.vipkid 通過大資料和標籤來智慧型地進行師生匹配。當我們把標籤抽象成括號 匹配過程簡化為括號串的匹配,希望聰明的你來解決如下問題 判斷給定的括號序列是否合法且反回文。對於這樣標籤抽象組成的括號序列,我們有如下定義 合法的的括號序列 反回文的括號序列 如果序列長度為 ll,且字元從 00 開始...

2017 計蒜之道 初賽 第六場(個人題解)

a.微軟手機的訊號顯示 模擬題,用乙個7 7個陣列,然後int除法判斷訊號有幾成就可以了 include using namespace std define inf 0x3f3f3f3f define lc x x 1 define rc x x 1 1 define mid x,y x y 1 ...

牛客多校第六場

d 題意感覺說的不是很清楚,一開始題意弄錯了,以為是最優的方案,結果是對於每個盒子這個 so clever 的人的做法是優先選擇盡可能大的物品裝完乙個盒子,我就不知道這個人 聰明了。思路 賽後知道題意後,5分鐘寫完,瞎暴力就一發過了,我自己都有點出乎意料真水了。includeusing namesp...