求助蚂蚁笔试第二题,我这样写为啥不对呀
有一个01字符串,每个字符都有一个价值,字符串中不能出现 110,问删除一定字符后最大价值是多少
#include
using namespace std;
const int N = 2e5 + 10;
typedef long long LL;
LL a[N];
LL f[N][3];
int main()
{
int n; cin >> n;
for (int i = 1; i <= n; i ++) cin >> a[i];
string s; cin >> s; s = " " + s;
for (int i = 1; i <= n; i ++)
{
char c = s[i];
if (c == '0')
{
f[i][1] = f[i - 1][1];
f[i][2] = f[i - 1][2];
f[i][0] = max(f[i - 1][0], f[i - 1][1]) + a[i];
}
else
{
f[i][0] = f[i - 1][0];
f[i][1] = f[i - 1][0] + a[i];
f[i][2] = max(f[i - 1][1], f[i - 1][2]) + a[i];
}
}
cout << max(f[n][0], max(f[n][1], f[n][2]));
}
#include
using namespace std;
const int N = 2e5 + 10;
typedef long long LL;
LL a[N];
LL f[N][3];
int main()
{
int n; cin >> n;
for (int i = 1; i <= n; i ++) cin >> a[i];
string s; cin >> s; s = " " + s;
for (int i = 1; i <= n; i ++)
{
char c = s[i];
if (c == '0')
{
f[i][1] = f[i - 1][1];
f[i][2] = f[i - 1][2];
f[i][0] = max(f[i - 1][0], f[i - 1][1]) + a[i];
}
else
{
f[i][0] = f[i - 1][0];
f[i][1] = f[i - 1][0] + a[i];
f[i][2] = max(f[i - 1][1], f[i - 1][2]) + a[i];
}
}
cout << max(f[n][0], max(f[n][1], f[n][2]));
}
全部评论
兄弟问一下,你还记得最后一题那个翻转是对节点本身翻转,还是对节点子树或者其他的什么东西翻转不
c==1的情况,f[i][1] = max(f[i-1][0]+a[i], f[i-1][1])
相关推荐
点赞 评论 收藏
分享
牛客96609213...:疯狂背刺,之前还明确设置截止日期,还有笔试,现在一帮人卡在复筛,他反而一边开启扩招,还给扩招的免笔试,真服了,你好歹先把复筛中的给处理了再说 点赞 评论 收藏
分享
10-23 18:07
辽宁工程技术大学 Web前端 重生之我学Java干...:我从后端的角度分析一下你的第一个项目,我感觉亮点不是很突出。因为我是因为组内有需求,临时上手学react干活。我用到的技术基本就cover你那个智慧园区管理平台的很多亮点了。那作为比较专业的前端,你上述的内容是不是有点单薄呢。感觉还得包装
点赞 评论 收藏
分享