本帖最後由 tonyh 於 2023-6-10 19:50 編輯
試使用動態規劃法(DP),求最大連續子序列和。
範例輸入 1:-2 1 -3 4 -1 2 1 -5 4
範例輸出 1:6
範例輸入 2:0 -2 3 5 -1 2
範例輸出 2:9
範例輸入 3:-2 11 -4 13 -5 -2
範例輸出 3:20
範例輸入 4:-2 1 -3 4 -1 2 1 -5 4
範例輸出 4:6
範例輸入 5:-2 -3 -1
範例輸出 5:-1
Java- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- public class Ch01 {
- BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
- String raw[];
- int maxS, maxV;
- Ch01() throws Exception
- {
- raw=br.readLine().split(" ");
- for(int i=0, len=raw.length; i<len; i++)
- {
- if(i==0)
- {
- maxS=Integer.parseInt(raw[i]);
- maxV=Integer.parseInt(raw[i]);
- }else
- {
- int t=Integer.parseInt(raw[i]);
- maxS=Math.max(maxS+t, t);
- maxV=Math.max(maxV, maxS);
- }
- }
- System.out.println(maxV);
- }
- public static void main(String[] args) throws Exception{
- new Ch01();
- }
- }
複製代碼 C++- #include<bits/stdc++.h>
- using namespace std;
- stringstream ss;
- string str;
- int maxS, maxV;
- int main()
- {
- cin.tie(0);
- cin.sync_with_stdio(0);
- getline(cin, str);
- ss<<str;
- int t;
- ss>>t;
- maxS=t;
- maxV=t;
- while(ss>>t)
- {
- maxS=max(maxS+t, t);
- maxV=max(maxV, maxS);
- }
- cout<<maxV<<endl;
- return 0;
- }
複製代碼 |