版权声明:欢迎转载 https://blog.csdn.net/suntengnb/article/details/80053122
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
待补