求助,环型dp到最后应该怎么判断第一个有没有取
  • 板块灌水区
  • 楼主fangzichang
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/4/29 20:39
  • 上次更新2023/10/28 02:38:44
查看原帖
求助,环型dp到最后应该怎么判断第一个有没有取
678087
fangzichang楼主2022/4/29 20:39

原题链接 圆环独立集

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,a[N];
int f[N][2];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	f[1][0]=0;
	f[1][1]=a[1];
	//0不取1取 
	for(int i=2;i<=n-1;i++){
		f[i][0]=max(f[i-1][0],f[i-1][1]);
		f[i][1]=f[i-1][0]+a[i];
	}
	f[n][0]=max(f[n-1][0],f[n-1][1]);
	//f[n][1]=f[n-1][0]+a[n]-a[1];
	//f[n][1]=f[n-1][0]+a[n];
	//由于不知道第一个取没取,所以不知道最后一个能不能取 
	int ans=max(f[n][0],f[n][1]);
	cout<<ans<<endl;
	return 0;
}

如上,求神犇救命

2022/4/29 20:39
加载中...