4 条题解
-
0
#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
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
``` 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
枚举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
- 上传者