社区讨论

救------命

P2690[USACO04NOV] Apple Catching G参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi7y98sd
此快照首次捕获于
2025/11/21 05:34
4 个月前
此快照最后确认于
2025/11/21 05:34
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
long long t,w,maxx=-99;
long long a[100001]={0},tree[100001],sum=1,b[100001]={0};
void dfs(long long rem,long long tre,long long swi,long long tot){
	if(rem==0||tre==sum+1){
		if(tot>maxx){
			maxx=tot;
		}
		return;
	}
//	for(long long j=1;j<=sum;j++){
		for(long long k=0;k<=1;k++){
				if(swi==b[tre]){
					if(k==0){//不变 
			 dfs(rem,tre+1,swi,tot+a[tre]);
			}
			else if(k==1){//变 
				if(swi==1){
					dfs(rem-1,tre+1,2,tot+a[tre]);
				}
				else if(swi==2){
					dfs(rem-1,tre+1,1,tot+a[tre]);
				}
			}
		}
		else if (swi!=b[tre]){
					if(k==0){//不变 
			 dfs(rem,tre+1,swi,tot);
			}
			else if(k==1){//变 
				if(swi==1){
					dfs(rem-1,tre+1,2,tot+a[tre]);
				}
				else if(swi==2){
					dfs(rem-1,tre+1,1,tot+a[tre]);
				}
			}
		}
			
		}
//	}
}
int main(){
	scanf("%d%d",&t,&w);
	
	for(long long i=1;i<=t;i++){
		scanf("%d",&tree[i]);
	}
	for(long long i=1;i<=t;i++){
		if(tree[i]==tree[i+1]){
			a[sum]++;
		}
		else{
			a[sum]++;
			b[sum]=tree[i];
			sum++;
		}
	}
	sum--;
	dfs(w,1,1,0);
	cout<<maxx;
}

第456TLE 调试了一个好像一直在循环一直没有输出

回复

1 条回复,欢迎继续交流。

正在加载回复...