HDU 4293--Groups
来源:互联网 发布:wlan流量和数据流量 编辑:程序博客网 时间:2024/05/21 17:28
来源:http://acm.hdu.edu.cn/showproblem.php?pid=4293
题意:有n个人,可任意分成若干组,然后每个人个各提供一个信息,表示他们组前面有多少人,后面有多少人。问最多有多少个信息是不冲突的。
分析:给n个人编号1到n,一个组报出前后有多少人时可以算出这组的人的区间,这样就可以把本题转化成给定一些带权值的区间,求不相交区间的最大权值。这样就可以先按区间排个序,然后依次更新就行了。
#include <iostream>#include <cstdio>#include <cmath>#include <string>#include <cstring>#include <cstdlib>#include <algorithm>using namespace std;const int N = 505;int mp[N][N], dp[N];struct point{ int a, b;} p[N];bool cmp(point x, point y){ if(x.b!=y.b) return x.b<y.b; else return x.a < y.a;}int main(){ int n, a, b; while(scanf("%d", &n)!=EOF) { for(int i=0; i<n; i++) { scanf("%d%d", &a, &b); p[i].a = a+1; p[i].b = n-b; } sort(p, p+n, cmp); memset(mp, 0, sizeof(mp)); memset(dp, 0, sizeof(dp)); for(int i=0; i<n; i++) { a = p[i].a, b = p[i].b; if(a>b) continue; if(mp[a][b]>=b-a+1) continue; mp[a][b]++; dp[b] = max(dp[b], dp[a-1]+mp[a][b]); for(int j=b+1; j<=n; j++) dp[j] = dp[b]; } printf("%d\n", dp[n]); } return 0;}
- hdu 4293 Groups
- HDU 4293 Groups
- HDU 4293--Groups
- hdu 4293 Groups
- hdu 4293 Groups
- hdu 4293 Groups
- hdu 4293 Groups
- hdu 4293 Groups
- HDU 4293 Groups
- HDU 4293 Groups
- Groups - HDU 4293 dp
- hdu 4293 Groups dp
- HDU 4293 Groups 拓扑排序
- HDU 4293 Groups(区间DP)
- HDU 4293 Groups (线性dp)
- HDU - 4293 Groups (DP)
- HDU 4293 Groups(dp)
- HDU 4293 Groups【区间dp】
- 数据结构好难啊!!!
- Cisco Catalyst 3560-E配置说明(下)
- ASP.NET中Image控件不能自动刷新
- C#向前台页面中输出JS代码
- 'log4j:ERROR LogMananger.repositorySelector was null'解决方法
- HDU 4293--Groups
- WAVEFORMATEX 格式说明
- vc工程配置积累
- GZIP简单压缩与解压
- [OK]ecshop二次开发:商品分类添加图片显示功能
- 【翻译】Windows下文件的命名
- android 获取联系人代码样例
- iPhone开发 地图线路
- oracle with子句