1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<code>數塔問題<br>#include<iostream></code>
<code>#include<cstring></code>
<code>using</code>
<code>namespace</code> <code>std;</code>
<code>int</code> <code>a[100009][12];</code>
<code>int</code> <code>maxi(</code><code>int</code>
<code>a,</code><code>int</code> <code>b,</code><code>int</code> <code>c)</code>
<code>{</code>
<code> </code><code>int</code>
<code>max1;</code>
<code> </code><code>max1=a>b?a:b;</code>
<code> </code><code>max1=max1>c?max1:c;</code>
<code> </code><code>return</code>
<code>}</code>
<code>int</code>
<code>main()</code>
<code>n,x,y;</code>
<code> </code><code>while</code><code>(cin>>n)</code>
<code> </code><code>{</code>
<code> </code><code>if</code><code>(n==0)</code><code>break</code><code>;</code>
<code> </code><code>int</code>
<code>max=0;</code>
<code> </code><code>memset</code><code>(a,0,</code><code>sizeof</code><code>(a));</code>
<code> </code><code>for</code><code>(</code><code>int</code>
<code>ii=0;ii<n;ii++)</code>
<code> </code><code>{</code>
<code> </code><code>scanf</code><code>(</code><code>"%d%d"</code><code>,&x,&y);</code>
<code> </code><code>//cin>>x>>y;</code>
<code> </code><code>a[y][x]++;</code>
<code> </code><code>if</code><code>(y>max)</code>
<code> </code><code>max=y;</code>
<code> </code><code>}</code>
<code>i=max-1;i>=0;i--)</code>
<code> </code><code>if</code><code>(a[i+1][0]>a[i+1][1]) a[i][0]+=a[i+1][0];</code>
<code> </code><code>else</code>
<code> </code><code>a[i][0]+=a[i+1][1];</code>
<code> </code><code>for</code><code>(</code><code>int</code>
<code>j=1;j<=9;j++)</code>
<code> </code><code>a[i][j]+=maxi(a[i+1][j],a[i+1][j-1],a[i+1][j+1]);</code>
<code> </code><code>if</code><code>(a[i+1][10]>a[i+1][9])</code>
<code> </code><code>a[i][10]+=a[i+1][10];</code>
<code> </code><code>a[i][10]+=a[i+1][9];</code>
<code> </code><code>cout<<a[0][5]<<endl;</code>
<code> </code><code>}</code>
<code>0;</code>