題目鏈接(點擊直達)
問題 B: X額寶
時間限制: 1 Sec 記憶體限制: 256 MB提交: 46 解決: 33
[狀態] [提交] [命題人:外部匯入]
題目描述
【理財有風險,投資需謹慎】Alice計劃將自己的所有紅包拿去投資,
在粗略預測了該理財產品的各日收益后,Alice希望通過一次買賣獲得最大的收益,
買賣當天均可以享受到當日盈虧,允許一天內先買后賣,
希望你幫她計算一下最大盈利,
輸入
第一行是樣例個數K(1<=K<=100)每個樣例的第一行是天數N(1<=N<=100)
第二行包含N個整數Ai(-100<=Ai<=100),表示當天盈虧,
輸出
對于每個樣例,輸出一個數字表示Alice的最大盈利,如果該理財產品賺不到錢,她也可以選擇不購入此產品,請直接輸出0,
樣例輸入
4 3 1 0 0 9 -2 1 -3 4 -1 2 1 -5 4 6 -4 -1 5 -4 1 -1 3 -9 -9 -6
樣例輸入
1 6 5 0
原理:先定義一個dp的陣列變數,以n為長度,從dp[1]開始進行一次for回圈(ps:如果從0開始會導致陣列越界),利用max函式判斷是當前的a[i]大還是上一個dp加上當前的a[i]之和大,即max(a[i],dp[i-1]+a[i]);找出兩者中較大的一個,作為當前dp[i]中的內容,
之后再做一次i從0到9的for回圈,找出最終最大的一個和,
偽代碼:
for(i=1;i<n;i++)
{
dp[i]=max(a[i]+dp[i-1]+a[i]);
}
int m=dp[0];
for(i=0;i<n;i++)
{
m=max(m,dp[i]);
}
C++代碼
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int k,i,n,j; 6 scanf("%d",&k); 7 for(i=0;i<k;i++) 8 { 9 scanf("%d",&n); 10 int a[n]={0},dp[n]={0}; 11 for(j=0;j<n;j++) 12 { 13 scanf("%d",&a[j]); 14 } 15 int l; 16 dp[0]=a[0]; 17 for(l=1;l<n;l++) 18 { 19 dp[l]=max(a[l],dp[l-1]+a[l]); 20 } 21 int m=dp[0]; 22 for(j=0;j<n;j++) 23 { 24 m=max(m,dp[j]); 25 } 26 if(m>0) 27 printf("%d\n",m); 28 else 29 { 30 printf("0\n"); 31 } 32 } 33 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/69117.html
標籤:C++
上一篇:win32_operatingsystem 檔案存放在哪里呢
下一篇:最近在做三維點云配準方面研究,下面程式編譯成功,沒有影像,百思不得其解,希望專家們指點,或者將可供參考原始碼發本人郵箱3276181394qq.com,xie'x
