學習記錄 尺取

2021-09-01 13:27:03 字數 693 閱讀 9618

尺取法通常試用於選取區間有一定規律,或所選取的區間有一定的變化趨勢的情況。

poj3061

題意:給定乙個序列,找出最短的子串行長度,使得其和大於或等於s;

輸入

包含兩個數,乙個為序列長度n,乙個為s

樣例輸入

10 15

5 1 3 5 10 7 4 9 2 8

樣例輸出

2思路

①當乙個區間的和大於等於s,則不需要再向後推進右端點,因為其和必定大於s並且長度更長 。因此,當區間和小於s時右端點向右移動,和大於等於s時,左端點繼續向右移動找到最短的區間;

②為了能更快速的判斷子串行的和的值,可進行字首和預處理;

int len=10,i;  /*令n為10*/

int s=0,t=0,sum=0,a[10],s,n;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

scanf("%d %d",&s,&n);

while(1)

if(len>n)

len=0;

printf("%d\n",len);

ACM 學習記錄 尺取法

給定乙個陣列和乙個數s,在這個陣列中找乙個區間,使得這個區間之和等於s。例如 給定的陣列int x 14 和乙個s 15。那麼,可以找到的區間就應該有0到4,3到5,6到7.注意這裡的下標從0開始 對於這樣的題,不用任何技巧就可以跑出結果,例如下面這個方法可能是大多數人能夠想出來的 先用乙個陣列su...

尺取 C語言

相比於普通的直接暴力列舉,尺取效率就高的多了。用乙個題目來比較一下 如果用通常的方法來解決這個問題就是這樣的 includelong long int a 2000010 int main if flag ans ans就是所要求的最大值,每次拿加好後的flag和ans比較,得到最大的那個 ans ...

Bound Found(尺取 字首和)

題目大意 就是給n個有正有負的整數,然後給k個t,在n數列中找到連續的乙個序列使得這個序列的和的絕對值最接近t,然後輸出這個序列的和的絕對值和它的區間左右端點。思路 這是個尺取的問題,首先這是我第一道尺取題,不知道為什麼第一道就不容易找單調出序列,不知道掛題的學長怎麼想的,雖然當時講了一小下這種問題...