hdu5542 CCPC中国赛 dp + 树状数组
来源:互联网 发布:人类为何不优化人种 编辑:程序博客网 时间:2024/05/24 06:49
题意是给你n个数让你求选出m个数且单调递增的个数;
首先给出的数值特别大 而数的个数才1000 所以先离散处理下 ;
具体思路: dp+树状数组;
我是建了m棵树 用来记录没j个的情况 dp【i】【j】表示以j结尾的数 里面递增数为i个 求这些书里面包含num【j】的情况 这样跑i 建树
初始化dp【1】【j】 = 1;
for(i = 2; i <= m; i++) { memset(sum, 0, sizeof(sum)); for(j = 1; j <= n; j++) { dp[i][j] = (dp[i][j] + find(num[j].value - 1)) % mod; update(num[j].value, dp[i - 1][j]); } }至于建树和求和按照正常来就行
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;const int Max = 1010;const int mod = 1e9 + 7;struct node{ int value; int ii;}num[Max];__int64 sum[Max];__int64 dp[Max][Max];int cmp(node a, node b){ return a.value < b.value;}int cmp1(node a, node b){ return a.ii < b.ii;}int update(int a, __int64 c){ for(int i = a; i <= 1000; i += (i&(-i))) sum[i] = (sum[i] + c) % mod; return 0;}__int64 find(int a){ __int64 s = 0; for(int i = a; i >= 1; i -= i&(-i)) s = (s + sum[i]) % mod; return s;}int main(){ int T, i, j, n, m, d = 1; scanf("%d", &T); while(T--) { scanf("%d%d", &n, &m); for(i = 1; i <= n ; i++) { scanf("%d", &num[i].value); num[i].ii = i; } sort(num + 1, num + 1 + n, cmp); int k = -1; int x = 0; for(i = 1; i <= n; i++) { if(num[i].value != k) { k = num[i].value; num[i].value = ++x; } else { num[i].value = x; } } sort(num + 1, num + 1 + n, cmp1); memset(dp, 0, sizeof(dp)); for(i = 1; i <= n; i++) dp[1][i] = 1; for(i = 2; i <= m; i++) { memset(sum, 0, sizeof(sum)); for(j = i-1; j <= n; j++) { dp[i][j] = (dp[i][j] + find(num[j].value - 1)) % mod; update(num[j].value, dp[i - 1][j]); } } __int64 ans = 0; for(i = 1; i<= n; i++) ans = (ans + dp[m][i]) % mod; printf("Case #%d: ", d++); printf("%I64d\n", ans); } return 0;}
0 0
- hdu5542 CCPC中国赛 dp + 树状数组
- HDU5542(dp+树状数组)
- HDU5542(dp + 树状数组)
- hdu5542 树状数组优化dp
- HDU5542(树状数组优化DP)
- hdu5542(树状数组优化dp)
- 2015 CCPC C题 【树状数组优化dp】
- HDU 5542 ccpc 树状数组优化dp +离散化
- 【HDU5542 2015 CCPC 南阳国赛C】【DP】The Battle of Chibi n个数中恰好长度为m的单升子序列数
- 南阳ccpc C题 The Battle of Chibi(树状数组优化+dp)
- 2015 南阳 CCPC hdu 5542 The Battle of Chibi(DP+树状数组优化+离散化)
- CCPC.2017哈尔滨站-重现赛-A(manacher+树状数组)
- hdu5125 dp+树状数组
- hdu4521 dp+树状数组
- 2017CCPC哈尔滨 A:Palindrome(manacher+树状数组)
- ccpc哈尔滨A [HDU-6230] Palindrome Manacher+树状数组
- hdu 5927 Auxiliary Set 2016CCPC东北地区大学生程序设计竞赛 - 重现赛 F题(树状dp)
- HDU5542 The Battle of Chibi (DP)
- Zonal harmonic 拟合 Spherical harmonic
- 软件工程(C编码实践篇)学习总结
- 编程之美-只考加法的面试题整理
- TextVIew多个链接
- OC中的基本冒泡排序
- hdu5542 CCPC中国赛 dp + 树状数组
- @Html.ActionLink(参数)
- Python求解“八皇后”问题的递归思路
- Erlang map 中的非法匹配问题
- 书签地址
- 黑马程序员----Java基础学习之模板设计模式
- Leetcode刷题 sql算法题 178 Rank Scores
- 4,Xcode的调试
- 【ShawnZhang】带你看数据结构——第十二课:图