僅有一行,包含兩個正整數n, m,表示棋盤的規模。
output
僅有一行,包含乙個整數,即跳法種數mod 30011。
sample input
3 5sample output
10data constraint
對於10%的資料,1 ≤ n ≤ 10,2 ≤ m ≤ 10;
對於50%的資料,1 ≤ n ≤ 10,2 ≤ m ≤ 10^5;
對於80%的資料,1 ≤ n ≤ 10,2 ≤ m ≤ 10^9;
對於100%的資料,1 ≤ n ≤ 50,2 ≤ m ≤ 10^9。..
...分析
90分:
做乙個3*n的矩陣,前n列表示距離下一行為奇數的每一列的答案的和,中間n列代表偶數的,最後n列代表最後一列的答案
100分:
換一種構圖
...程式(90分):
#include#include#includeusing namespace std;
int n,m,ansjz[155][155],jz[155][155],t[155][155],mo=30011;
void jzksm(int a[155][155],int b[155][155])
void work()
jz[i][n+i]=1;
jz[n+i][n+i]=1;
jz[i][2*n+i]=1;
jz[n+i][2*n+i]=1;
if (i+1<=n)
}ansjz[1][n+1]=1;
}int main()
work();
m--;
while (m!=0)
printf("%d",ansjz[1][2*n]);
return 0;
}
...
...程式(100分):
#include#include#includeusing namespace std;
int n,m,mo=30011,t[200][200],b[200][200],a[200][200],jz[200][200];
void jzksm(int a1[200][200],int b1[200][200])
void work()
for (int i=1;i<=2*n;i++)
for (int j=1;j<=2*n;j++)
a[i][j]=b[i][j]=jz[i][j];
memset(t,0,sizeof(t));
m-=3;
}int main()
work();
while (m!=0)
jzksm(a,b);
printf("%d",((long long)a[1][n]-b[1][2*n]+mo)%mo);
return 0;
}
矩陣乘 Shoi2013 超級跳馬
問題 f shoi2013 超級跳馬 時間限制 1 sec 記憶體限制 256 mb 題目描述 現有乙個n行m列的棋盤,乙隻馬欲從棋盤的左上角跳到右下角。每一步它向右跳奇數列,且跳到本行或相鄰行。跳越期間,馬不能離開棋盤。例如,當n 3,m 10時,下圖是一種可行的跳法。試求跳法種數mod 3001...
SHOI2013 超級跳馬
我是常年遊蕩於題解區的幽靈。直觀的想法就是字首和 差分優化dp,但還有些比較奇妙的方法or trick f i j f i 1 j 1 f i 1 j f i 1 j 1 color 因為可以一步跳到 f i j 的狀態也可以一步跳到 f i 2 j 反過來也成立 只考慮從左邊某個特定的列的轉移矩陣...
jzoj3294 SHTSC2013 超級跳馬
僅有一行,包含兩個正整數n,m,表示棋盤的規模。output 僅有一行,包含乙個整數,即跳法種數mod 30011。sample input 3 5sample output data constraint 對於10 的資料,1 n 10,2 m 10 對於50 的資料,1 n 10,2 m 10 ...