在蒜廠年會上有乙個**,在乙個環形的桌子上,有 n 個紙團,每個紙團上寫乙個數字,表示你可以獲得多少蒜幣。但是這個遊戲比較坑,裡面竟然有負數,表示你要支付多少蒜幣。因為這些數字都是可見的,所以大家都是不會出現的賠的情況。
遊戲規則:每人只能抓一次,只能抓取一段連續的紙團,所有紙團上的數字和就是你可以獲得的蒜幣。
蒜頭君作為蒜廠的一員在想,我怎麼可以獲得最多的蒜幣呢?最多能獲取多少蒜幣呢?
因為年會是發獎,那麼一定有大於 0 的紙團。
輸入格式
第一行輸入乙個整數 n,表示有 n 個紙團。
第二行輸入輸入 n 個整數 ai表示每個紙團上面寫的數字(這些紙團的輸入順序就是環形桌上紙團的擺放順序)。
輸出格式
輸出乙個整數,表示蒜頭君最多能獲取多少蒜幣。
只過了6組資料:
本題成環了,連續的子串行最大值,當不成環的時候,取得最大值的時候可能在中間的連續部分,在當成環之後,就多了一種在兩端的可能,那麼這種連續子串行的最大值求法就可以用總和減去中間最小的連續子串行的和。
#include using namespace std;
typedef long long ll;
const int maxn=1e6;
ll a[maxn];
ll dp_max[maxn];
ll dp_min[maxn];
int main()
ll max=-maxn;
ll min=maxn;
dp_min[0]=dp_max[0]=0;
for(int i=1;i<=n;++i)
cout<} return 0;
}
最長連續子串行和
動態規劃 一維dp i 表示以i結尾的子陣列的最大和 以下 可以記錄子陣列的開始和結束位置 要求輸出子串行和的第乙個和最後乙個 include include 兩個輔助陣列 const int maxn 1000 int dp maxn int pre maxn 存放子串行的開始 int arr m...
最長回文子串行 最長公共子串行 最長連續回文子串
public class solution int result new int len 1 len 1 stringbuffer sb new stringbuffer s sb sb.reverse string rev sb.tostring result 0 0 0 下面兩個for迴圈相當於...
最長公共子串行 最長連續公共子串行 最長遞增子串行
面試中除了排序問題,還會經常出現字串的子串行問題,這裡講解使用動態規劃解決三個常見的子串行問題 1 最長公共子串行問題 lcs,longest common subsequence problem 2 最長連續公共子串行問題 3 最長遞增子串行 lis,longest increment subse...