1樓:匿名使用者
符合題目條件。
子段要符合以下兩個要求:
1. 和最大
2. 長度儘可能大
3. 連續
看例1:
4 -5 3 2 4中,最大連續子段是3 2 4,三者相加為9,長度為3,其他長度為3的子段和皆不大於9,長度大於3的子段也皆不大於9,是故輸出9和3
看例2:
1 2 3 -5 0 7 8中,直觀上就能看出0 7 8和為15,基本上最大連續子段必包含它了,由於1 2 3 -5的和為非負數,與0 7 8合併之後可令子段和及長度都增加,故最大連續子段為1 2 3 -5 0 7 8,輸出16和7
注意:為什麼強調非負,因為在和相同的前提下,將輸出長度更長的連續子列。可是即便如此,也可能存在多個和與長度相同的連續子列,如何將所有符合條件的子列都輸出出來,也需要考慮好。
這道題目很經典,搜「動態規劃」和「最大連續子列」檢視更詳細解釋
2樓:匿名使用者
- -||| 要最大值哎,樣例一-5放進去還能是最大值嗎? 4+(-5)+3+2+4=8<9哎, 第二組 你不把-5放進去的話 連續的最大值也只能是15哎 = =
最大子段和----pascal
3樓:匿名使用者
直接給你寫下程式吧var
a:array[1..100000] of integer;
n,i,ans,len,tmp,beg:longint;
begin
read(n);
for i:=1 to n do
read(a[i]);
tmp:=0;
ans:=0;
len:=0;
beg:=0;
for i:=1 to n do
begin
if tmp+a[i]>ans then
begin
ans:=tmp+a[i];
len:=i-beg;
endelse if (tmp+a[i]=ans) and (i-beg>len) then
len:=i-beg;
if tmp+a[i]<0 then
begin
beg:=i;
tmp:=0;
endelse tmp:=tmp+a[i];
end;
writeln(ans);
end.
什麼是最大連續子段和
4樓:匿名使用者
給出一個數列,數列元素均為負整數、正整數、0。請找出數列中的一個連續子數列,使得這個子數列中包含的所有元素之和最大,在和最大的前提下還要求該子數列包含的元素個數最多,並輸出這個最大和以及該連續子數列中元素的個數。例如數列為4,-5,3,2,4時,輸出9和3;數列為1 2 3 -5 0 7 8時,輸出16和7。
5樓:
連續且非空的一段使得這段和最大
極大化求最大子矩形問題 貼個pascal程式
6樓:匿名使用者
vij p1055
varans,max,s,l,w,i,j,ll,y1,y2:longint;
x,y:array[-1..5002] of longint;
procedure qsort(l,r:longint);
vari,j,p:longint;
begin
i:=l; j:=r; p:=x[(i+j) shr 1];
repeat
while x[i]p do dec(j);
if i<=j then
begin
x[0]:=x[i]; x[i]:=x[j]; x[j]:=x[0];
y[0]:=y[i]; y[i]:=y[j]; y[j]:=y[0];
inc(i); dec(j);
end;
until i>j;
if ix[i]) and (y[j]>=y1) and (y[j]<=y2) then
begin
if ll*(y2-y1)<=ans then break;
max:=(y2-y1)*(x[j]-x[i]);
if max>ans then ans:=max;
if (y[j]>y1) and (y[j]<=y[i]) then y1:=y[j];
if (y[j]=y[i]) then y2:=y[j];
end;
end;
writeln(ans);
end.
若滿意請採納,o(∩_∩)o謝謝
pascal乘積最大問題
7樓:匿名使用者
我們一起來分析一下:
設字串長度為n,乘號數為k,如果n=50,k=1時,
有(n-1)=49種不同的乘法,當k=2時,有c(2,50-1)=1176種乘法,既c(k,n-1)種乘法,當n、k稍微大一些的時候,用窮舉的方法就不行了。
設數字字串為a1a2…an
k=1時:一個乘號可以插在a1a2…an中的n-1個位置,這樣就得到n-1個子串的乘積:
a1*a2…an, a1a2*a3…an, …, a1a2…a n-1*an (這相當於是窮舉的方法)
此時的最大值=max
k=2時,二個乘號可以插在a1a2…an中n-1個位置的任兩個地方, 把這些乘積
分個類,便於觀察規律:
①倒數第一個數作為被乘數:
a1*a2 …a n-3 a n-2 a n-1*an,
a1a2 …*a n-2 a n-1*an,
a1a2 …*a n-1*an。
設符號f[n-1,1]為在前n-1個數中插入一個乘號的最大值,則的最大值為
f[n-1,1]*an。
②倒數第二個數作為被乘數:
a1*a2 …an-3 a n-2* a n-1,
an … a1a2 …*a n-2*a n-1an,
a1a2…*a n-3 a n-2* a n-1 an。
設符號f[n-2,1]為在前n-2個數中插入一個乘號的最大值,則的最大值為
f[n-2,1]*a n-1 an
③倒數第三個數作為被乘數:
… 設符號f[n-3,1]為在前n-3個數中插入一個乘號的最大值,則的最大值為
f[n-3,1]*a n-2 a n-1 an
…… a3~an作為被乘數:f[2,1]*a3 …a n-2 a n-1 an
此時的最大乘積為:
f[n,k]=max
設f[i,j]表示在 i 個數中插入 j 個乘號的最大值,g[i,j]表示從ai到aj的數字列,則可得到動態轉移方程:
f[i,j] = max
(1<=i<=n, 1<=j<=k)
邊界: f[i,0] =g[1,i] (數列本身)
階段:子問題是在子串中插入j-1,j-2……1,0個乘號,因此乘號個數作為階段的劃分(j個階段)
狀態:每個階段隨著被乘數數列的變化劃分狀態。
決策:在每個階段的每種狀態中做出決策。
資料結構:
(此題不需要高精度,pascal用longint即可ac)
int n,k; /* n為數字個數,k為劃分個數*/
int i,j,l; /*迴圈變數*/
char c; /*字元讀入*/
int data[50]=; /*存數字的陣列*/
int g[50][50],f[50][10]; /*g為數字列,f為動態規劃陣列*/
初始化:
cin >> n >> k; /*讀入,n,k*/
for(i=1;i<=n;i++)
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
g[i][j]=g[i][j-1]*10+data[j]; /*初始化數列*/
for(i=1;i<=n;i++)
f[i][0]=g[1][i]; /*初始化動態規劃陣列*/
動態規劃:
for(i=1;i<=n;i++)/*方程:f[i,j]表示前i個數中插入j個*號的最優值。*/
for(j=1;j<=i+1;j++)
for(l=1;l<=i-1;l++)
f[i][j]=max(f[i][j],f[l][j-1]*g[l+1][i]);
輸出f[n][k]
8樓:匿名使用者
這是動規題
並且是noip上 吧
不難看看題解就知道了
跪求pascal填空題,大俠幫幫忙!
9樓:水漾橋
什麼內容的,例如閱讀程式寫結果還是完善程式?
先給你道完善程式題:
(最大連續子段和)給出一個數列(元素個數不超過100),數列元素均為負整數、正整數、0。請找出數列中的一個連續子數列,使得這個子數列中包含的所有元素之和最大,在和最大的前提下還要求該子數列包含的元素個數最多,並輸出這個最大和以及該連續子數列中元素的個數。例如數列為 4,-5,3,2,4時,輸出9和3;數列為1 2 3 -5 0 7 8 時,輸出16和7。
vara: array[1..100] of integer;
n, i, ans, len, tmp, beg: integer;
begin
read(n);
for i := 1 to n do
read(a[i]);
tmp := 0;ans := 0;len := 0;
beg := ① ;
for i := 1 to n do
begin
if tmp + a[i] > ans thenbegin
ans := tmp + a[i];
len := i - beg;
endelse if ( ② ) and (i - beg > len) then
len := i - beg;
if tmp + a[i] ③ thenbegin
beg := ④ ;
tmp := 0;
endelse
⑤ ;
end;
writeln(ans, ' ', len);
end.
noip2009裡面的,希望對你有幫助。
以下是答案
① 0② tmp+a[i]=ans或者 a[i]+tmp=ans 或者ans=a[i]+tmp等
③ <0
④ i⑤ inc(tmp, a[i])或者tmp := tmp+a[i]我還有其他題目,不過網上也有,希望能幫到你。
10樓:匿名使用者
我有 2000——2010所有的,郵箱給我
11樓:小葉子
自己去把以前歷年的noip初賽都去做一遍就好了
12樓:匿名使用者
noip初賽試題裡面多得是,自己看
連續奇數的和是135,這連續奇數中最大是多少
135 5 27 分別是23 25 27 29和31 最大是31 有5個連續奇數之和是135,這5個連續奇數分別是多少 135 5 27 27 4 23 27 2 25 2727 2 29 27 4 31 這5個連續的奇數是 23 25 27 29 31.供參考。135 5 27 27 4 23 2...
試證明 在連續的正整數中,最大的數的立方不等於其他兩數立方的和
設三個連續的正整數為n,n 1,n 2 n 0 n 2 3 n 3 6n 2 12n 8n 3 n 1 3 2n 3 3n 2 3n 1 n 2 3 n 3 n 1 3 n 3 3n 2 9n 7 n 1 3 12 n 1 18 n 1 12 n 1 2 18n為整數,n 1為整數 n 1 12 n...
6和068中最大的是誰?最小是誰
3 5 0.6,5 8 0.625 因為 0.6 0.625 0.68 7 6所以 3 5 5 8 0.68 7 6 答 最大的是7 6,最小的是3 5。在3 4,4 5,5 6,6 7,7 8中,最小數與最大數的差是多少 這道題主要是要找出最大和最小數,然後進行求解。觀察可知每個分數的分子都比分母...