4 条题解

  • 0
    @ 2024-1-27 11:28:34
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define endl '\n'
    void GordenGhost();
    int main(){
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        int t=1;
        cin>>t;
        while(t--){
            GordenGhost();
        }
        return 0;
    }
    
    void GordenGhost(){
        int n,k,sum=0,ans=0,ww=0;
        vector<int>one,two;
        cin>>n>>k;
        for (int i = 0; i < n; ++i) {
            int a;
            cin>>a;
            one.push_back(a);
        }
        for (int i = 0; i < n; ++i) {
            int a;
            cin>>a;
            two.push_back(a);
        }
        for (int i = 0; i < min(k,n); ++i) {
            sum+=one[i];
            ww= max(ww,two[i]);
            ans= max(ans,sum+ww*(k-1-i));
        }
        cout<<ans<<endl;
    }
    
    • 0
      @ 2024-1-7 14:58:07
      import java.util.*;
      import java.io.*;
      public class Main {
      
          static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
          static PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
          public static void main(String[] args)throws Exception {
              int q = Int();
              while (q-- > 0) {
                  int n = Int();
                  int k = Int();
                  int[] a = new int[n];
                  int[] b = new int[n];
                  a[0]=Int();
                  for (int i = 1; i < n; i++) a[i] =a[i-1]+ Int();
                  b[0]=Int();
                  int max2=b[0];
                  for (int i = 1; i < n; i++) max2=b[i] = Math.max(Int(),max2);
                  int j=Math.min(k,a.length);
                  int max=0;
                  for(int i=j-1;i>=0;i--){
                      int sum=0;
                      int m=k-i-1;
                      sum+=a[i];
                      if(m==0)max= Math.max(sum,max);
                      else {
                          sum += b[i] * m;
                          max = Math.max(sum, max);
                      }
                  }
                  pw.println(max);
              }
              pw.flush();
          }
          private static int Int() throws Exception{
              st.nextToken();
              return (int)st.nval;
          }
      }
      
      • 0
        @ 2024-1-7 13:27:32
        ```
        package A;
        
        import java.io.*;
        
        public class Main {
            static int[] b;
            static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
            static PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
            private static int Int() throws Exception{
                st.nextToken();
                return (int)st.nval;
            }
            public static void main(String[] args) throws Exception{
                int t = Int();
                while (t-- > 0){
                    int n = Int();
                    int k = Int();
                    b = new int[n];
                    int[] add = new int[n + 1];//a前n项和
                    for (int i = 0; i < n; i++) {
                        add[i + 1] = add[i] + Int();
                    }
                    for (int i = 0; i < n; i++) {
                        b[i] = Int();
                    }
                    int x = Math.min(n, k);
                    int[] b1 = new int[x];//维护一个单调数组
                    for (int i = 1; i < x; i++) {
                        if(b[i] > b[b1[i - 1]]){
                            b1[i] = i;
                        }else b1[i] = b1[i - 1];
                    }
                    int ans = 0;
        
                    if(n > k){
                        for (int i = 0; i < x; i++) {
                            int temp = add[i + 1] + (k - i - 1) * b[b1[i]];
                            ans = Math.max(ans, temp);
                        }
                    }else {
                        for (int i = 0; i < x; i++) {
                            int temp = add[i + 1] + (k - i - 1) * b[b1[i]];
                            ans = Math.max(ans, temp);
                        }
                    }
        
        
                    pw.println(ans);
        
                }
                pw.flush();
            }
        
        }
        
        ```
        
        • 0
          @ 2024-1-7 13:17:14

          枚举1-n的情况

          #include <vector>
          #include <algorithm>
          #include <cmath>
          #include <map>
          #include <set>
          #include<stack>
          #include<queue>
          using namespace std;
          #define int long long
          const int MOD= 998244353;
          void solve() {
              int n,k;cin >> n>>k;
             vector<int> a(n+1),b(n+1);
             for(int i=1;i<=n;i++){
              cin>>a[i];
             }
             for(int i=1;i<=n;i++){
              cin>>b[i];
             }
             int ans=0,num=0,mx=0;
             for(int i=1;i<=n&&i<=k;i++){
              num+=a[i];
              mx=max(mx,b[i]);
              ans=max(ans,num+mx*(k-i));
             }
             cout<<ans<<endl;
              return;
          }
          signed main()
          {
              iostream::sync_with_stdio(false);
              cin.tie(0);
              cout.tie(0);
              int t;cin>>t;
              while(t--){
                  solve();
              }
              return 0;
          }
          
          • 1

          信息

          ID
          588
          时间
          1000ms
          内存
          256MiB
          难度
          8
          标签
          (无)
          递交数
          76
          已通过
          12
          上传者