这个思路还有优化的空间吗,还是说只能换思路?
查看原帖
这个思路还有优化的空间吗,还是说只能换思路?
1148266
IceFireELSE楼主2024/10/23 21:10

一个很差的思路,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;
}
2024/10/23 21:10
加载中...