2018年西电ACM网络赛

版权声明:欢迎转载 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

待补

猜你喜欢

转载自blog.csdn.net/suntengnb/article/details/80053122