Planar Reflections

Planar Reflections

推了半天公式一看题解发现是DP(倒_(:з」∠)_

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 #define db double
 4 using namespace std;
 5 ll mod=1e9+7;
 6 const int qs=1e3+7;
 7 ll t,n,k,f[qs][qs];
 8 //f[i][j] 表示前面还有i块墙,当前能量为j 产生的粒子数 
 9 //f[i-1][j]:粒子向前走,能量不变
10 //f[n-i][j-1]:分裂出的粒子向相反方向走,能量-1 
11 int main(){
12     std::ios::sync_with_stdio(false);
13     cin>>t;
14     while(t--){
15         cin>>n>>k;
16         for(int i=1;i<=n;++i)  f[i][1]=1; //能量为1结果恒为1 
17         for(int j=1;j<=k;++j)  f[0][j]=1; //没有墙粒子数为1
18         for(int j=1;j<=k;++j){
19             for(int i=1;i<=n;++i){
20                 f[i][j]=(f[i-1][j]+f[n-i][j-1])%mod;
21             }
22         }
23         cout<<f[n][k]<<"\n";    
24     }
25     
26     
27     return 0;
28 }

 

posted @ 2021-04-06 21:09  Suki_Sugar  阅读(73)  评论(0编辑  收藏  举报
Live2D