数据结构优化DP,树状数组+离散化
https://www.acwing.com/problem/content/299/
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int N = 1e3 + 5, mod = 1e9 + 7; 5 6 int n, m; 7 int a[N], f[N][N]; 8 int nums[N], cnt; 9 int tr[N]; 10 11 int lowbit(int x) { 12 return x & -x; 13 } 14 15 void add(int pos, int v) { 16 for (int i = pos; i <= cnt; i += lowbit(i)) tr[i] = (tr[i] + v) % mod; 17 } 18 19 int sum(int x) { 20 int ans = 0; 21 for (int i = x; i; i -= lowbit(i)) ans = (ans + tr[i]) % mod; 22 return ans; 23 } 24 25 int main() { 26 int T; cin >> T; 27 for (int C = 1; C <= T; C ++) { 28 cin >> n >> m; 29 cnt = 0; 30 for (int i = 1; i <= n; i ++) { 31 cin >> a[i]; 32 nums[cnt ++] = a[i]; 33 } 34 sort(nums, nums + cnt); 35 cnt = unique(nums, nums + cnt) - nums; 36 for (int i = 1; i <= n; i ++) a[i] = lower_bound(nums, nums + cnt, a[i]) - nums + 1; 37 38 for (int i = 1; i <= n; i ++) f[i][1] = 1; 39 for (int j = 2; j <= m; j ++) { 40 for (int i = 1; i <= cnt; i ++) tr[i] = 0; 41 for (int i = 1; i <= n; i ++) { 42 f[i][j] = sum(a[i] - 1); 43 add(a[i], f[i][j - 1]); 44 } 45 } 46 47 int ans = 0; 48 for (int i = 1; i <= n; i ++) ans = (ans + f[i][m]) % mod; 49 50 cout << "Case #" << C << ": " << ans << endl; 51 } 52 return 0; 53 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现