1 条题解

  • 0
    @ 2025-7-7 16:26:40
    #include<bits/stdc++.h>
    using namespace std;
    const int T=1005,W=35;
    int a[T],f[T][W][3];//f[i][k][p]:前i时间,移动k次,停在p处 的最大值 
    int main()
    {
    	int t,w;
    	cin>>t>>w;
    	for(int i=1;i<=t;i++)
    	{
    		cin>>a[i];
    	}
    	int ans=0;
    	for(int i=1;i<=t;i++)
    	{
    		int a1= a[i]==1;
    		int a2= a[i]==2;
    		f[i][0][1]=f[i-1][0][1]+a1;
    		f[i][0][2]=0;
    		for(int k=1;k<=w;k++)
    		{			
    			f[i][k][1]=a1+max(f[i-1][k][1],f[i-1][k-1][2]);
    			f[i][k][2]=a2+max(f[i-1][k][2],f[i-1][k-1][1]);
    			int mx=max(f[i][k][1],f[i][k][2]); 
    			ans=max(ans,mx);
    		}
    	}
    	cout<<ans<<endl;
    	//cout<<max(f[t][w][1],f[t][w][2])<<endl;
    	return 0;
    }
    
    • 1

    信息

    ID
    316
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    (无)
    递交数
    49
    已通过
    17
    上传者