题目链接:http://8be0ed4d.ngrok.io/contest/1/problem/D
这道题算是DP问题吧,当时不知道怎么就想出来了。
用一个二维数组,dp[i][j]指的是到第i个字符升序为j的情况数。
大概就会得出这么一个关系:
代码如下:
import java.io.*;
import java.util.*;
public class Main {
static final int mod=1000000007;
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public static void main(String args[]) throws IOException{
int dp[][]=new int[110][110];
int t=getInt();
while(t--!=0){
int n=getInt();
int p=getInt();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dp[i][j]=0;
int a[]=new int[n+1];
for(int i=1;i<=n;i++)a[i]=getInt();
for(int i=1;i<=n;i++)dp[i][1]=1;
for(int i=2;i<=n;i++){
for(int j=1;j<i;j++){
if(a[i]>a[j])
for(int k=1;k<=j;k++){
dp[i][k+1]=(dp[j][k]+dp[i][k+1])%mod;
}
}
}
int ans=0;
for(int i=1;i<=n;i++)
ans=(ans+dp[i][p])%mod;
System.out.println(ans);
}
}
static int getInt() throws IOException{
in.nextToken();
return (int) in.nval;
}
}