问题标题: 酷町堂:5540 万圣节要糖果

0
0
已解决
周琪岳
周琪岳
资深光能
资深光能

5540   万圣节要糖果

WA0分:

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int t,n,a[1005];
bool b[1005];
int ans,maxn;
int max(){
	int p=0;
	maxn=-0x3f3f3f3f;
	for(int i=1;i<=n;i++){
		if(b[i]){
			if(a[i]>maxn){
				maxn=a[i];
				p=i;
			}
		}
		
	}
	b[p]=false;
	b[p+1]=false;
	if(p!=0) b[p-1]=false;
	return maxn;
}
bool check(){
	bool flag=true;
	maxn=-0x3f3f3f3f;
	for(int i=1;i<=n;i++){
		if(b[i]){
			flag=false;
			break;
		}
	}
	return flag;
}
int main(){
	cin>>t;
	for(int i=1;i<=t;i++){
		cin>>n;
		maxn=-0x3f3f3f3f;
		memset(b,1,sizeof(b));
		for(int j=1;j<=n;j++){
			cin>>a[j];
		}
		while(true){
			ans+=max();
			if(check()){
				cout<<ans<<endl;
				break;
			}
		} 
		
	}
	return 0;
}

 

周琪岳在2020-10-18 16:41:49追加了内容

@曹灿阳 我没学过递推


1
已采纳
曹灿阳
曹灿阳
初级天翼
初级天翼

???有必要这么复杂吗???

其实,你只要一个递推就可以了。

“递推四宝”

定义:f[i]表示从第一户到第i户一共可以拿到多少糖

递推式:

f[i]=max(f[i-2],f[i-3])+a[i];

边界:

f[1]=a[1];
f[2]=a[2];

解:

cout<<max(f[n],f[n-1])<<endl;

最后,不要忘了每新输入一次数据,f[]数组要重置

曹灿阳在2020-10-16 20:54:32追加了内容

不要举报啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!~~~

我要回答