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;
    }
    
    • 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
      10
      Tags
      (None)
      # Submissions
      10
      Accepted
      3
      Uploaded By