题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447

因为图中点的坐标值过大,达到1e9.然而只有1e5个点。所以先将其离散化。并按照<x.y>二元组排序。每次对于同一行的点连续处理两次。

第一次:先考虑由上一行转移而来的情况:树状数组找到左上角的最大值+v、以及上方值的最大值。

第二次:考虑由同行的点转移来的情况。树状数组查询区间1~x-1的最大值

便利过程中维护最大值

代码丑的一批

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define mod 1000000007
#define For(i,m,n) for(int i=m;i<=n;i++)
#define Dor(i,m,n) for(int i=m;i>=n;i--)
#define LL long long
#define lan(a,b) memset(a,b,sizeof(a))
#define sqr(a) a*a
using namespace std;#define maxn 100010
int shu[maxn];int lowbit(int i)
{return i&(-i);
}int query(int i)
{int ans=0;while(i){ans=max(ans,shu[i]);i-=lowbit(i);}return ans;
}void update(int i,int p)
{while(i<=maxn-1){shu[i]=max(p,shu[i]);i+=lowbit(i);}
}struct node
{int x,y,v;
}a[100010];
int dp[100010];
int d[100010];bool cmp(node a,node b)
{if(a.x==b.x)return a.y<b.y;return a.x<b.x;
}bool cmp1(node a,node b)
{if(a.y==b.y)return a.x<b.x;return a.y<b.y;
}int main()
{int t;scanf("%d",&t);while(t--){lan(d,0);lan(shu,0);lan(a,0);lan(dp,0);int n;scanf("%d",&n);int x,y,v;For(i,1,n){scanf("%d%d%d",&x,&y,&v);a[i].x=x;a[i].y=y;a[i].v=v;}sort(a+1,a+1+n,cmp1);int tem=a[1].y;int id=1;a[1].y=1;For(i,2,n){if(a[i].y==tem){a[i].y=id;}else{tem=a[i].y;id++;a[i].y=id;}}sort(a+1,a+1+n,cmp);tem=a[1].x;id=1;a[1].x=1;d[1]=1;For(i,2,n){if(a[i].x==tem){a[i].x=id;d[id]++;}else{tem=a[i].x;id++;a[i].x=id;d[id]++;}}int maxx=0;id=0;int l=1,r;For(i,1,n){
//            printf("d[%d]=%d\n",i,d[i]);if(!d[i])continue;For(j,1,d[i]){int k=j+id;x=a[k].x;y=a[k].y;v=a[k].v;int ans1=query(y-1)+v;int ans2=query(y);
//                printf("%d %d:%d %d\n",x,y,ans1,ans2);dp[y]=max(ans1,ans2);}For(j,1,d[i]){int k=j+id;x=a[k].x;y=a[k].y;v=a[k].v;
//                    printf("%d %d:%d\n",x,y,query(y-1));maxx=max(maxx,max(dp[y],query(y-1)));update(y,max(dp[y],query(y-1)));}id+=d[i];}printf("%d\n",maxx);}return 0;
}

hdu 6447YJJ's Salesman 离散化+树状数组+DP相关推荐

  1. HDU - 5877 Weak Pair(离散化+树状数组+dfs序)

    题目链接:点击查看 题目大意:给定一个n个节点的树,每个节点都有权值,现在定义weak pair(u,v)需要满足的两个条件: u是v的祖先: ; 问给定的树中有多少个weak pair: 题目分析: ...

  2. HDOJ/HDU 1556 Color the ball(树状数组)

    Problem Description N个气球排成一排,从左到右依次编号为1,2,3-.N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从 ...

  3. nyoj 1261 音痴又音痴的LT(离散化+树状数组求K小数)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1261 解题思路:比较水的题,用离散化+树状数组求K小数即可,先用一次离线处理. #inc ...

  4. HDU - 5542 The Battle of Chibi(树状数组+DP)

    UVA - 12983 The Battle of Chibi(树状数组+DP) HDU - 5542 The Battle of Chibi(树状数组+DP) #include<cstdio& ...

  5. HDU-5542-The Battle of Chibi【树状数组+dp】

    HDU-5542-The Battle of Chibi[树状数组+dp] Time Limit: 6000/4000 MS (Java/Others) Memory Limit: 65535/655 ...

  6. HDU 6447 YJJ's Salesman(树状数组优化DP + 离散化)

    HDU 6447 YJJ's Salesman 题目 给一个二维数组,从(0,0)走到(1e9, 1e9).每次只能走右,下,右下,三个方向.其中只有通过右下走到特定给出的点(村庄)时才会获得分值.问 ...

  7. HDU 4325 离散化+树状数组 或者 不使用树状数组

    题意:给出一些花的开放时间段,然后询问某个时间点有几朵花正在开放. 由于ti<1e9,我们需要先将时间离散化,然后将时间点抽象为一个数组中的点,显然,我们需要进行区间更新和单点查询,可以考虑线段 ...

  8. [HDU - 2852] KiKi's K-Number (树状数组+二分)

    链接 http://acm.hdu.edu.cn/showproblem.php?pid=2852 题意 现在需要你对一个空序列做nnn次操作,操作分三种 0x0\ \ x0  x :向序列中加入一个 ...

  9. HDU 3015 Disharmony Trees(树状数组)

    题意:给你n棵树,每棵树上有两个权值X H 对于X离散化 :3 7 1 5 3 6 -> 2 6 1 4 2 5,对于H一样 然后F = abs(X1-X2)   S=min(H1,H2) 求出 ...

最新文章

  1. 编程模拟洗牌和发牌过程c语言,洗牌发牌模拟系统课程设计报告.doc
  2. ios 部分string颜色_ios 设置字符串中某段字符的颜色
  3. 互联网让我们变笨了吗:过去10年关于大脑的11个有趣发现
  4. django_4数据库3——admin
  5. CDOJ 482 Charitable Exchange bfs
  6. go int64转string_go常见问题收录
  7. 28 MM配置-采购-采购申请-定义凭证类型
  8. Docker安装Mysql8.0,并配置忽略大小写,一句命令搞定
  9. 类似新浪微博和google图片的HTML5实现图片拖拽上传功能
  10. dos命令大全DOS命令图解教程
  11. TDL信道模型和CDL信道模型
  12. python使用mq-fw包
  13. xgboost的plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名
  14. 易宝支付为二清机构放开通道,导致POS代理机构卷款跑路
  15. window无法访问此文件夹,请确保输入的文件名是正确的,并且您有权访问此文件夹
  16. openwrt MT7620A编译dropbear
  17. playwright 组件超时问题
  18. 一年级计算机知识竞赛,2016一年级语文下册基础知识竞赛试题
  19. JAVA入门Hwork,HBase Java编程入门教程
  20. 软件测试入门之软件测试的概念与过程(精辟内容)

热门文章

  1. 右键文件用指定软件打开
  2. ICPC训练联盟2021寒假冬令营(5)(部分题解):
  3. 关于自动化运维的那些事儿
  4. 【保姆级讲解】C语言---指针精华
  5. 小红书什么内容容易火?
  6. 2018,AI旗舰启程出发!自动化所全球AI邀请函
  7. 陷阱技术探秘──动态汉化Windows技术的分析
  8. 660 - 循环基础-利息计算
  9. Layui设置table指定行的背景色
  10. Chrome/edge inspect远程调试移动设备