NC23976. 选择
描述
输入描述
第一行一个正整数T,表示数据组数。每组数据的第一行一个正整数N。接下来一行N个正整数a1,a2,…,aN。
输出描述
T行,每行一个整数,表示每组数据的答案。
示例1
输入:
3 5 1 100 101 100 1 4 1 2 3 4 3 51 100 51
输出:
200 6 102
C(clang 3.9) 解法, 执行用时: 4ms, 内存消耗: 276K, 提交时间: 2019-05-04 14:46:49
#include<stdio.h> int max(int x,int y) { return x>y?x:y; } int main(void) { int t; scanf("%d",&t); while(t--) { int a[101]={0},x,n,i; scanf("%d%d",&n,&x); a[1]=x; for(i=2;i<=n;i++) { scanf("%d",&x); a[i]=max(x+a[i-2],a[i-1]); } printf("%d\n",a[n]); } return 0; }
C++(g++ 7.5.0) 解法, 执行用时: 5ms, 内存消耗: 396K, 提交时间: 2022-12-03 13:45:45
#include"iostream" using namespace std; int main() { int t; cin>>t; while(t-->0) { int n; cin>>n; int a[n+1],s[n+1]; for(int i=1;i<=n;i++) { cin>>a[i];} s[0]=0; s[1]=a[1]; for(int i=2;i<=n;i++) {s[i]=max(s[i-1],s[i-2]+a[i]); } cout<<s[n]<<endl; } }
Python3(3.5.2) 解法, 执行用时: 40ms, 内存消耗: 7236K, 提交时间: 2020-01-18 18:20:50
n=int(input()) for i in range(n): m=int(input()) sumls=[0 for i in range(m+1)] ls=list(map(int,input().split())) sumls[1]=ls[0] for j in range(2,m+1): sumls[j] = max(sumls[j - 1], sumls[j - 2] + ls[j-1]) print(sumls[m])
C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 348K, 提交时间: 2019-04-14 22:03:27
#include<bits/stdc++.h> using namespace std; int main() { int T,n,i,t,a[2],x; cin>>T; while(T--) { a[0]=a[1]=0; cin>>n; for(i=0;i<n;i++) cin>>t,x=max(a[0],a[1]),a[1]=a[0]+t,a[0]=x; cout<<max(a[0],a[1])<<endl; } return 0; }
C++ 解法, 执行用时: 7ms, 内存消耗: 352K, 提交时间: 2021-07-16 14:17:13
#include<bits/stdc++.h> using namespace std; int n,T; int main() { cin>>T; while(T--) {int dp[110]={0}; cin>>n; for(int i=2,x;i<=n+1;++i) { cin>>x; dp[i]=max(dp[i-1],dp[i-2]+x); } cout<<dp[n+1]<<endl; } return 0; }