选拔赛之dp
来源:互联网 发布:淘宝买家秀怎么发微淘 编辑:程序博客网 时间:2024/04/30 21:24
第102题: 小P 的问题课堂2
大概能看的出是dp,但是自己不会写转移方程
而且就算会了也不会优化,,
多学的东西:
1:hash前要去重,2:这里原本的复杂度是超的,所以用了f和tot来记录重复计算的东西。。。很巧妙。。3:hash的方式用这种函数的方式更好。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <map>#include <string>#include <queue>#include <cmath>#include <tr1/unordered_map>#include <bits/stdc++.h>using namespace std;using namespace std::tr1;#define N 20010#define M 1000010#define LL long long#define ULL unsigned long long #define eps 1e-8#define pii pair<int, int>#define pdd pair<double, double>#define MP make_pair#define pb push_back#define inf 0x3f3f3f3f#define fi first#define se second#define md (ll+rr>>1)#define lson ll, md#define rson md+1, rr#define mod 1000000007int a[N];int dp[N][110];int f[N][110];int tot[110];LL sum[N], san[N];int cnt;void RE() {vector<int> v;v[0] = -1;}int hx(int LL x) {return lower_bound(san, san+cnt, x) - san;}int main() {int T;scanf("%d", &T);while(T--) {int n, k;scanf("%d%d", &n, &k);if(k > n) RE();cnt = 0;for(int i = 1; i <= n; ++i) {scanf("%d", &a[i]);sum[i] = sum[i-1] + a[i];san[cnt++] = sum[i];}san[cnt++] = 0;sort(san, san+cnt);cnt = unique(san, san+cnt) - san;for(int i = 1; i <= n; ++i) sum[i] = hx(sum[i]);memset(dp, 0, sizeof dp);memset(f, 0, sizeof f);memset(tot, 0, sizeof tot);dp[0][0] = 1;f[hx(0)][0] = 1;tot[0] = 1;for(int i = 1; i <= n; ++i) {for(int j = 1; j <= min(k, i); ++j) {dp[i][j] += tot[j-1] - f[sum[i]][j-1] + mod;dp[i][j] %= mod;}for(int j = 1; j <= min(k, i); ++j) {f[sum[i]][j] += dp[i][j];tot[j] += dp[i][j];f[sum[i]][j] %= mod;tot[j] %= mod;}}printf("%d\n",dp[n][k]);}}
0 0
- 选拔赛之dp
- 选拔赛之 spfa
- 选拔赛之 kmp
- 选拔赛之 线段树
- ECNU CCCC选拔赛 E题 Teacher Panda and plagiarism dp
- 第六场选拔赛 Greatest Naruto Army DP+递归
- 百度之星第一场选拔赛第一题
- 河南省第十届省赛选拔赛之个人赛总结
- G将军--2015蓝桥杯 校内选拔赛真题 --树形DP
- 选拔赛+总结
- 今晚选拔赛
- 选拔赛-杀伤力
- 选拔赛-染色
- 选拔赛题目
- sdnu1046选拔赛
- CPPC网络选拔赛 C题 [HDU 5834] Magic boy Bi Luo with his excited tree (树形dp)
- 2011“安博——微软校园之星大赛”选拔赛成功组织
- 大小之差 (2013年11月24日 蓝桥杯校内选拔赛c\c++B组)
- js基础 one
- List<?>和List<T>的区别?即类型参数“<T>”和无界通配符“<?>”的区别
- 哈哈,我的博客竟然会有粉丝
- slf4j 和 log4j合用的(Maven)配置
- 获取二叉树叶子节点个数的递归及非递归算法
- 选拔赛之dp
- QPallete
- Mac: Alias[设置命令的别名]
- Android hander实现异步线程队列化
- 数据库基础知识_1
- memcached的深度解析
- node命令
- App开放接口api安全性—Token签名sign的设计与实现
- BZOJ 2595: [Wc2008]游览计划