尺取法通常試用於選取區間有一定規律,或所選取的區間有一定的變化趨勢的情況。
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,然後輸出這個序列的和的絕對值和它的區間左右端點。思路 這是個尺取的問題,首先這是我第一道尺取題,不知道為什麼第一道就不容易找單調出序列,不知道掛題的學長怎麼想的,雖然當時講了一小下這種問題...