NC51193. The Battle of Chibi
描述
输入描述
The first line of the input gives the number of test cases, T. T test cases follow.
Each test case begins with two numbers N and M, indicating the number of information and number of information Gai Huang will select. Then N numbers in a line, the ith number ai(1≤ai≤109) indicates the value in Cao Cao's opinion of the ith information in happening order.
输出描述
For each test case, output one line containing Case #x: y, where x is the test case number (starting from 1) and y is the ways Gai Huang can select the information.
The result is too large, and you need to output the result mod by .
示例1
输入:
2 3 2 1 2 3 3 2 3 2 1
输出:
Case #1: 3 Case #2: 0
说明:
In the first cases, Gai Huang need to leak 2 information out of 3. He could leak any 2 information as all the information value are in increasing order.C++11(clang++ 3.9) 解法, 执行用时: 129ms, 内存消耗: 4472K, 提交时间: 2020-03-02 22:17:52
#include<bits/stdc++.h> #define ll long long using namespace std; int t,num; namespace work { const int mod=1e9+7; int n,m,a[1006],f[1006][1006]; int main() { memset(f,0,sizeof(f)); a[0]=-(1<<30); f[0][0]=1; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) for(int k=0;k<j;k++) if(a[j]>a[k]) f[i][j]=(f[i][j]+f[i-1][k])%mod; ll ans=0; for(int i=1;i<=n;i++) ans=(ans+f[m][i])%mod; return ans; } } int main() { scanf("%d",&t); while(t--) { num++; printf("Case #%d: %d\n",num,work::main()); } return 0; }