一个很差的思路,4,5,6三个点超内存,这个思路还有优化的空间吗,还是说只能换思路?
#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
struct A{
int num,id;
}a[1005];
struct Now{
int now,wn,id,num;
};
queue<Now>q;
int older=1,cnt=0,c=0;
int t,w,ans=-1;
int main(){
cin >> t >> w;
for(int i = 1;i <= t;i++){
int newer;
cin >> newer;
if(newer != older){
if(cnt != 0)
a[++c] = {cnt,older};
cnt = 0;
older = newer;
}
cnt++;
}
if(cnt != 0)
a[++c] = {cnt,older};
//now时间,wn使用次数,id树编号,num果子数
//不要白不要,既然最先的是编号1,那就不浪费,接上!
if(a[1].id == 1)
q.push({1,0,1,a[1].num});
else{
//两种:动或不动
//使用一次机会,接到果子
q.push({1,1,2,a[1].num});
//不使用机会,放弃果子
q.push({1,0,1,0});
}
while(q.size()){
Now t = q.front();
q.pop();
int st = t.now;
int wn = t.wn;
int id = t.id;
int num = t.num;
if(wn > w)
continue;
if(st == c){
ans = max(ans,num);
continue;
}
int i = st+1;
if(id != a[i].id){
q.push({i,wn+1,a[i].id,num+a[i].num});
q.push({i,wn,id,num});
}
else
q.push({i,wn,id,num+a[i].num});
}
cout << ans;
return 0;
}