2 solutions

  • 1
    @ 2026-2-28 20:04:06

    动态规划

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e4+10,M=110;
    int a[M],b[N],f[N];//f[i]表示走到第i关时分数的最大值。
    int main()
    {
        int n,m;
        cin>>n>>m;
        for(int i=0;i<m;i++)
        {
            cin>>a[i];
        }
        for(int i=0;i<n;i++)
        {
            cin>>b[i];
        }
        memset(f,-0x3f,sizeof f);
        f[0]=0;
        for(int i=0;i<n;i++)
        {
            if(f[i]==-0x3f3f3f3f)
            {
                continue;
            }
            for(int j=0;j<m;j++)
            {
                int x=i+a[j];
                if(x>=n)
                {
                    f[n]=max(f[n],f[i]+b[i]);
                    continue;
                }
                f[x]=max(f[x],f[i]+b[i]);
            }
        }
        cout<<f[n];
        return 0;
    }
    
    • 1
      @ 2025-8-19 11:33:13
      #include<bits/stdc++.h>
      using namespace std;
      const int N=10010;
      int a[N],b[N];
      int n,m;
      int ans=0;
      void dfs(int x,int w) //走到这个位置, 分数为w 
      {
          if(x>=n)
          {
           	ans=max(ans,w);
           	return ;
          }
          for(int i=0;i<m;i++)
          {
             dfs(x+a[i],w+b[x]);
          }
      }
      int main()
      {
          cin>>n>>m;
          for(int i=0;i<m;i++)
          {
              cin>>a[i];
          }
          for(int i=0;i<n;i++)
          {
              cin>>b[i];
          }
          dfs(0,0);
          cout<<ans; 
          return 0;
      }
      
      
      • 1

      Information

      ID
      2540
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      5
      Tags
      (None)
      # Submissions
      35
      Accepted
      3
      Uploaded By