2 solutions

  • 0
    @ 2026-3-2 17:33:05
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1010;
    int T,W;
    int a[N];
    int f[1010][35][3];
    int dfs(int t,int moved,int p)
    {
    	if(t==T+1) return 0;//时间已经用完
    	if(f[t][moved][p]==-1)
    	{
    		int now=(a[t]==p)?1:0;//判断当前时刻是否可以获得苹果
    		int best=now+dfs(t+1,moved,p);//不移动
    		if(moved<W) //还可以移动
    		{
    			best=max(best,now+dfs(t+1,moved+1,3-p));
    		}
    		f[t][moved][p]=best;
    	}
    	
    	return f[t][moved][p];
    }
    int main()
    {
    	cin>>T>>W;
    	memset(f,-1,sizeof f);
    	for(int i=1;i<=T;i++)
    	{
    		cin>>a[i];
    	}
    	cout<<dfs(0,0,1);
    	return 0;
    }
    

    Information

    ID
    3038
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    (None)
    # Submissions
    10
    Accepted
    3
    Uploaded By