3 solutions

  • 0
    @ 2026-4-18 20:31:12
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1010,M=40;
    int n,m,a[N],f[N][M],ans;
    int main() 
    { 
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i];
    		a[i]%=2;
    	}
    	for(int j=0;j<=m;j++)
    	{
    		for(int i=1;i<=n;i++)
    		{
    			if(j)
    			{
    				f[i][j]=max(f[i-1][j]+(j%2!=a[i]),f[i-1][j-1]+(j%2==a[i]));
    			}
    			else
    			{
    				f[i][j]=f[i-1][j]+(j%2!=a[i]);
    			}
    		}
    	}
    	for(int i=0;i<=m;i++)
    	{
    		ans=max(ans,f[n][i]);
    	}
    	cout<<ans;
    	return 0;
    }
    
    • 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;
      }
      
      • 0
        @ 2026-3-2 17:29:13
        
        #include<bits/stdc++.h>
        using namespace std;
        const int N=1010,M=40,L=3;
        int f[N][M][L],s[N];
        int main()
        {
            int T,W;
            cin>>T>>W;
            for(int i=1;i<=T;i++)
            {
                cin>>s[i];
            }
            memset(f,-0x3f,sizeof f);
            f[0][0][1]=0;
            for(int i=1;i<=T;i++)
            {
                for(int j=0;j<=W;j++)
                {
                    for(int k=1;k<=2;k++)
                    {
                        int t=1+(j%2);
                        f[i][j][k]=f[i-1][j][k];
                        if(i>0 and j>0)
                        {
                            f[i][j][k]=max(f[i][j][k],f[i-1][j-1][3-k]);
                        }
                        if(t==s[i])
                        {
                            f[i][j][k]++;
                        }
                    }
                }
            }
            cout<<max(f[T][W][1],f[T][W][2]);
            return 0;
        }
        
        • 1

        Information

        ID
        3038
        Time
        1000ms
        Memory
        256MiB
        Difficulty
        9
        Tags
        (None)
        # Submissions
        14
        Accepted
        4
        Uploaded By