HDU 4293 Groups
来源:互联网 发布:淘宝618大促报名 编辑:程序博客网 时间:2024/05/21 17:29
题意:N个人沿着一条路一起去食堂,其中有些人排成一排,每个人报出两个数ai,bi,分别指他前面有多少人后面有多少人(和他一排的人不算在前面或后面),但有些人可能会说错,问最好的情况下最多有多少人说对。
分析:每个人报出两个数ai,bi,则该人就在区间[ai+1,n-bi]中,设sec[i][j]指区间[i,j]中说对的最多人数,dp[i]指以第i个人结尾的说对的最多人数,则dp[i]=max(dp[i],dp[j]+sec[j][n-i]) (0<=j<i)。
Code :
#include <algorithm>#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <vector>#include <queue>#include <cmath>#include <map>#include <set>#define eps 1e-7#define LL long long#define pb push_back#define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a)<(b)?(a):(b))using namespace std;const int maxn=505;int dp[maxn],sec[maxn][maxn];int n;int main(){ while(scanf("%d",&n)==1){ int f,b; memset(sec,0,sizeof(sec)); for(int i=1;i<=n;i++){ scanf("%d %d",&f,&b); if(f+b>=n) continue; sec[f][b]=Min(sec[f][b]+1,n-f-b); } memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++){ for(int j=0;j<i;j++) dp[i]=Max(dp[i],dp[j]+sec[j][n-i]); } 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】
- 常用的内容提供器
- TeleportPro全站下载器注册码
- Protocol Buffer技术理解
- 转 Oracle 补丁体系 及 opatch 工具 介绍
- 沃信科技ERP系统容灾方案的服务器与数据库容灾
- HDU 4293 Groups
- Java实现Yahoo股票接口
- SICP 习题 (1.9) 解题总结:迭代计算过程和递归计算过程
- [Oracle] 在线段收缩(Online Segment Shrink)
- Qfile
- Android 模拟器r22.0.1 BUG 修复
- latex宏包冲突
- 详细整理Java 从命令控制台输入数据读取输入流System.in的几种常用方法
- LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”