題解: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...