UOJ Logo sharpland的博客

博客

2020年10月25日 培优班题解

2020-10-25 10:07:54 By sharpland

T1 最大连续和

三重循环 可以拿20~~30分

如果知道前缀和,可以优化到二重循环

仔细思考,如果当前累加和为负数,只会让后边的累加和变小。

所以,利用这个思路,可以一重循环解决。

10^8

int s=0,maxx=-100000000;
for (int i=1;i<=n;i++)
{
    cin>>x;
    s+=x;
    if (s>maxx) maxx=s;
    if (s<0) s=0;    
}

T2

字符串读入,根据要求判断即可。

需要熟悉字符串的读入和基本操作。

T3 卡牌游戏

贪心,我们显然尽量让乘的数越大越好。

所以,开个结构体,按照魔法值从大到小排序。

排序后,魔法值从大到小枚举,前i个最小的魔法值必然是第i个。

所以只需要累加前i个能量值,乘 第i个魔法值,得到一个方案的值。

最终n个方案中的最大值,必然是要求的。

T4 字母游戏

显然要枚举所有的方案

考虑用递归回溯。我们演示一下代码。


void dfs(int x,int y,int s){    
    if(s>ans) ans=s;    
    for(int i=0;i<4;i++){
        int xx=x+dx[i];
        int yy=y+dy[i];    
        if(xx<1||xx>r||yy<1||yy>c||f[a[xx][yy]]) continue;        
        f[a[xx][yy]]=1;
        dfs(xx,yy,s+1);
        f[a[xx][yy]]=0;
    }
}

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。