严格上升子序列个数;
#include <cstdio> #include <cstring> #define N 110 typedef long long LL; LL a[N], dp[N][N]; const int MOD = 1000000000 + 7; //dp[i][j] 以i结尾长度为j的严格递增子序列长度 ; int main() { int Q =1; int t; scanf("%d", &t); while(t--) { int n, m; scanf("%d%d", &n, &m); for(int i=1; i<= n; i++) { scanf("%lld", &a[i]); } memset(dp, 0, sizeof(dp)); for(int i=1; i<=n; i++) //感觉像是打表; { dp[i][1]= 1; for(int j=1; j<= i; j++) { for(int k=1; k< i; k++) { if(a[k] <a[i]) dp[i][j]=(dp[i][j]+dp[k][j-1])%MOD; } } } LL ans=0; for(int i=1; i<= n; i++) { ans=(ans+ dp[i][m]) %MOD; } printf("Case #%d: %lld\n", Q++, ans); } return 0; }
时间: 2024-10-08 22:18:27