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;
}
}