2 solutions

  • 1
    @ 2024-8-21 11:59:53
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int f[N][6],a[N];
    int main()
    {
        int n;
        cin>>n;
        memset(f,0xcf,sizeof f);
        f[0][0]=0;
        for(int i=1;i<=n;i++)
        {
            int x;
            cin>>x;
            f[i][0]=f[i-1][0];
            f[i][1]=max(f[i-1][1],f[i-1][0]-x);
            f[i][2]=max(f[i-1][2],f[i-1][1]+x);
            f[i][3]=max(f[i-1][3],f[i-1][2]-x);
            f[i][4]=max(f[i-1][4],f[i-1][3]+x);
        }
        cout<<max(f[n][0],max(f[n][2],f[n][4]));
        return 0;
    }
    
    • 0
      @ 2025-2-22 10:47:40

      比季总还厉害的写法 高端注释,你值得拥有!!!

      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e5+10;
      int f[N][6],a[N];
      /*
      f[i][0] 表示第i天没有股票且完成了一次交易
      f[i][1] 表示第i天有股票且没有完成第一次交易
      f[i][2] 表示第i天没有股票且完成了一次交易
      f[i][3] 表示第i天有股票且没有完成第二次交易
      f[i][4] 表示第i天没有股票且完成了两次交易
      */ 
      int main()
      {
      	int n;
      	cin>>n;
      	memset(f,0xcf,sizeof f);//无穷小 
      	f[0][0]=0;//入口 
      	for(int i=1;i<=n;i++)
      	{
      		int x;
      		cin>>x;
      		f[i][0]=f[i-1][0];
      		f[i][1]=max(f[i-1][1],f[i-1][0]-x);
      		f[i][2]=max(f[i-1][2],f[i-1][1]+x);
      		f[i][3]=max(f[i-1][3],f[i-1][2]-x);
      		f[i][4]=max(f[i-1][4],f[i-1][3]+x);
      	} 
      	cout<<max(f[n][0],max(f[n][2],f[n][4]));
      	return 0;
      }
    • 1

    Information

    ID
    218
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    16
    Accepted
    7
    Uploaded By