2018年西電ACM網路賽
阿新 • • 發佈:2018-11-26
A
遞推sum[i] = sum[i - 1] + i - 1
B
最大公約數
C
貪心。先快排,前n / 2個數沒有用,將中位數及其之後的數放入小頂堆中。每次取出堆頂元素,糖的數量+1或加到比下一個數大1,再入堆。最後的堆頂就是答案。
STL中的堆可能會超時。
D
找規律
E
搜尋或者動態規劃
動態規劃程式碼:
int dp[110][110];//小杰、小國
int main()
{
int t;
cin >> t;
while(t--)
{
memset(dp,0x3F,sizeof (dp));//inf
int n;
cin >> n;
dp[1][1] = 0;
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
{
if(j - i >= 1)//第一種轉移
dp[i][j] = min(dp[i][j],dp[i][j - i] + 1);
//if(i * 2 == j)//錯誤
//dp[i][j] = min(dp[i][j],dp[i][i / 2] + 1);//錯誤
if(i * 2 == j)
for(int k = 1; k <= n; ++k)//第二種轉移
dp[i][j] = min(dp[i][j],dp[k][j / 2] + 1);
}
}
int min_dp = inf;
for(int i = 1; i <= n; ++i)
min_dp = min(min_dp,dp[i][n]);
cout << min_dp << endl;
}
return 0;
}
F
待補
G
廣搜+康拓展開
H
01分數規劃(待補)或利用計算幾何中的結論:
①求最大斜率:將x座標排序,求x方向相鄰兩點的斜率,取最大值
②求最小斜率:將y座標排序,求y方向相鄰兩點的斜率,取最小值
I
待補
J
待補