hdu~2217(简单dp)
来源:互联网 发布:大数据挖据市场前景 编辑:程序博客网 时间:2024/06/05 14:51
visit
题意:在x轴上,出发点在0的位置,给你一些其他点的位置,求在规定时间内能遍历最多的点的个数。
其实个人觉得不会dp的人也能做,说是dp也算不上。
以0为起点,负半轴为左边。
1.先开两个数组l[],r[]存左右两边各点到0的距离。
2.再开两个数组lm[],rm[]存以上述各点为拐点能遍历的最多点的个数。
具体的还是看代码好理解:
<span style="font-size:18px;">#include <stdio.h>#include <string.h>#include <stdlib.h>int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}int fmax(int a,int b){ return a>b?a:b;}int main(){ int n,t,x,li,ri,sum; int l[2005],r[2005]; //记录左右两边到0点距离大小 int lm[2005],rm[2005]; //记录以i为拐点能遍历的最多点数 while(scanf("%d %d",&n,&t)!=EOF) { memset(lm,0,sizeof(lm)); memset(rm,0,sizeof(rm)); ri=0,li=0,sum=0; l[0]=r[0]=0; for(int i=1;i<=n;i++) //生成l[],r[],记录点为0的个数 { scanf("%d",&x); if(x<0) l[++li]=-x; else if(x>0) r[++ri]=x; else sum++; } qsort(&l[1],li,sizeof(int ),cmp); //升序排序 qsort(&r[1],ri,sizeof(int ),cmp); for(int i=1;i<=li;i++) //先从左边走 { int k=i; //以i为拐点,至少得走到i点 for(int j=1;j<=ri;j++) { if(l[i]*2+r[j]<=t) //走到左边第i个再走到右边第j个所花时间 lm[i]=++k; else break; } } for(int i=1;i<=ri;i++) //走右边走,同上 { int k=i; for(int j=1;j<=li;j++) { if(l[j]+r[i]*2<=t) rm[i]=++k; else break; } } int max=0; for(int i=1;i<=li;i++) //若不拐,从两边走能遍历最多点数 if(l[i]<=t) max=i; for(int i=max;i<=ri;i++) if(r[i]<=t) max=i; for(int i=1;i<=li;i++) //若拐弯,能遍历最大点数 max=fmax(max,lm[i]); for(int i=1;i<=ri;i++) max=fmax(max,rm[i]); printf("%d\n",max+sum); } return 0;}</span>
0 0
- hdu~2217(简单dp)
- HDU 1087 简单DP
- hdu 1978 简单dp
- hdu 2830 简单dp
- hdu 2151 简单dp
- hdu 3199 简单dp
- HDU DP 简单题
- hdu 4540(简单dp)
- hdu 2152(简单dp)
- HDU 4502 简单DP
- hdu 1087 简单dp
- HDU 1003(简单dp)
- hdu 1087 简单dp
- hdu 2751 简单dp
- hdu 2084 简单dp
- hdu 2577 简单dp
- hdu 1978 简单dp
- hdu 2059 简单dp
- 基于八叉树的拾取算法在游戏中的应用
- linux设备树笔记__dts基本概念及语法
- Android中Context详解 ---- 你所不知道的Context
- python判断字典,列表,元组为空的方法。
- PonyDebugger的安装使用
- hdu~2217(简单dp)
- 详解struts2 配置 <constant>
- org.springframework.web.context.ContextLoaderListener
- 建造者模式
- 四叉树+八叉树
- 电信项目错误集锦(总结)
- 局域网通讯之简单介绍
- java8提供的新遍历java.lang.Iterable.forEach
- Android onNewIntent调用机制