自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(17)
  • 收藏
  • 关注

原创 HDU 5335 贪心+BFS

求从0,0点到n-1,m-1点的最小二进制数分两种情况:1:若0,0点为‘1’,则为起点,进bfs贪心2:若0,0点为‘0’,则找出起点所连接的所有‘0’点所能接触到的‘1’点,取其中离终点曼哈顿距离最小的点当做起点,保证01串最短bfs贪心:每次只往右或下方走,对所有能到达的新点,若有0,则只进是0的点,否则进1#include "stdio.h"#incl

2015-07-31 10:38:51 534

原创 HDU 5316 线段树区间最值问题

T组数据N个数字,M次操作op=0:找出L-R区间内的最大‘值’op=1:把a位置的数字换成b对最大‘值’的定义:取区间内的最大子序列,需要保证子序列的下标为奇偶交替的用线段树分别记录每个区间的ee:以偶数下标开始偶数下标结束的最大和eo:以偶数下标开始奇数下标结束的最大和oe:以奇数下标开始偶数下标结束的最大和oo:以奇数下标开始奇数下标结束的最大和

2015-07-28 16:58:06 1141

原创 HDU 4394 BFS

M2%10x=N (x=0,1,2,3....)给出N,找到最小的满足条件的M由于:N的个位只由M的个位决定,N十位由M的个位和十位决定,N的百位由M的个位十位百位决定,以此类推所有从个位开始搜索满足条件的数字即可#include"stdio.h"#include "string.h"#include "math.h"#include "queue"using name

2015-07-27 09:52:51 686

原创 HDU 2167 状压DP

方格取数问题,给出n*n矩阵,3求能取得的最大和,要求取某个位置的数以后,其周围的8个数字均不能再取先预处理出来所有的可取状态,n=15时只有1597个状态,然后地推求解即可#include "stdio.h"#include "string.h"int n,ans;int b[21],a[21][21],s[1700];int dp[21][70001],sum[21

2015-07-25 16:46:11 453

原创 HDU 4568 旅行商问题

一个N*M的迷宫,每个点有代价,代价为-1时表示不能走到,迷宫中有k个宝藏,求取走所有宝藏所需要的最小代价,只能进入迷宫一次计算出所有宝藏之间的最短距离及从该宝藏出迷宫的最短距离,然后做状压DP即可#include "stdio.h"#include "string.h"#include "queue"using namespace std;struct node{ i

2015-07-25 15:54:37 1188

原创 HDU 4824 双调旅行商问题

由于跳转一次需要400,大于在扇道内转一圈,所以应尽可能少的跳转扇道,就转换成了双调旅行商问题,即从0区开始访问到最大的区域,再返回0区,所有中间点需走到一次#include "stdio.h"#include "string.h"#include "math.h"#include "algorithm"using namespace std;struct node{

2015-07-24 20:51:23 873

原创 HDU2224&POJ2677 双调旅行商问题

给出n个点,按X坐标升序给出,从1号点走到N号点再返回1号点所需的最小距离,要求所有点至少被走到一次要求1->n的路上所经过的点X坐标升序n->1路上所经过的点X坐标降序具体详解参考:http://blog.csdn.net/xiajun07061225/article/details/8092247#include "stdio.h"#include "stri

2015-07-24 20:08:07 650

原创 HDU 5303 dp

一个环上有n个苹果树,每个树上有ai个苹果,你有一个容量为k的篮子,装满苹果后要回到起点清空篮子,问你从起点出发,摘完所有苹果所走的最短路程。苹果最多有100000个使用两个DP数组,dp[0][i]表示顺时针取i个苹果的最短路程,dp[1][i]表示逆时针取i个苹果的最短路程ans=Min(dp[0][i],dp[1][sum-i]);#include "stdio.h"

2015-07-24 16:40:27 445

原创 HDU 5301 思路题

给出n*m的矩阵,里面有一个坏点,不覆盖这个坏点的矩阵填满n*m的矩阵,使得这些矩阵的最大面积最小,并输出最小面积先把矩阵转换为nans=MAX(矩阵最中心点到两边距离的最小值,MIN(坏点下方的点到矩阵左端和下端的最小值));#include "stdio.h"#include "string.h"int ans,n,m,x,y;int Max(int a,int b)

2015-07-24 10:27:20 494

原创 HDU 5308 规律+模拟

给出N个数字N,要把所有数字用完,使用+-*/最后变为24,中间运算可以有有浮点数对于1-14直接打表15以上的可以通过13个相同数字得到24,然后使后面的数全部运算为0相加即可贴一发官方题解#include "stdio.h"#include "string.h"int now;void pri(int l,int r){ int i;

2015-07-23 21:46:53 1008

原创 HDU 5115 区间DP

有n只狼,每只狼有两种属性,一种攻击力一种附加值,每杀一只狼受到的伤害值为这只狼的攻击值与它旁边的两只狼的附加值的和,求把所有狼都杀光受到的最小的伤害值。注意:如果杀死中间的狼,两边的狼会紧凑过来,也就是说中间不存在空位很明显的区间DPdp[i][k]=Min(dp[i][k],dp[i][l-1]+dp[l+1][k]+a[l]+b[i-1]+b[k+1]); // i位置起始到

2015-07-22 20:57:14 1187

原创 HDU 5289 思路+线段树处理

给出N个数,和K求这N个数的所有满足条件(最大数-最小数数组b记录以当前位置开始,到最右端最多满足条件的数的个数,b数组的值可通过二分+线段树查找区间最大最小值得到对于第二组数据10 50 3 4 5 2 1 6 7 8 9B数组为3 7 7 7 3 1 4 3 2 1由于当前I点取最右端值可能会导致i+1点和后面取到的点不满足条件,所有应有:b[i]得B数

2015-07-22 13:45:22 772

原创 Codeforces 558E 线段树处理字符串内排序

给出长度为n的字符串,m个操作。每个操作有三个值 l,r,op。op==1,表示将字符串中[ l ,r ]的部分按照升序排列。op==0,表示将字符串中[ l ,r ]的部分按照降序排列。输出最终的字符串按小写字母建26颗线段树对于每次修改,先记录[l,r]区间内各个字母出现的次数,并对相应区间清空,然后按照升序或者降序从新更新#include "std

2015-07-22 12:29:24 1079

原创 HDU 1269 强连通模板 Tarjan算法

求强连通量,为1输出Yes否则NoTarjan算法模板具体讲解:https://www.byvoid.com/zht/blog/scc-tarjan#include "stdio.h"#include "string.h"struct Edge{ int v,next;}edge[100010];int head[10010],stack[10010],dfn

2015-07-20 18:45:02 837

原创 HDU 2874 LCA离线算法 tarjan算法

给出N个点,M条边,Q次询问Q次询问每两点之间的最短距离典型LCA 问题   Marjan算法解#include "stdio.h"#include "string.h"struct Edge{ int to,next,len;}edge[20010];struct Ques{ int to,next,index;}ques[2000010];

2015-07-20 14:59:12 582

原创 HDU 2586 LCA离线算法 tarjan算法

LCA tarjan算法模板题 题意:给一个无根树,有q个询问,每个询问两个点,问两点的距离。用tarjan离线算法算出每个询问的两点的最近公共祖先ans[i]=dis[x[i]]+dis[y[i]]-2*dis[z[i]]; //  x[i],y[i]分别存储每次询问的两点,z[i]存储这两点的最近公共祖先#include "stdio.h"#include "stri

2015-07-20 09:22:46 614

原创 HDU 5273 区间DP

输入一组数,m次询问问每个询问区间的逆序数有多少区间DP简单题#include "stdio.h"#include "string.h"int dp[1010][1010],a[1010];int main(){ int n,m,i,j,k; while (scanf("%d%d",&n,&m)!=EOF) { for (i=1

2015-07-19 13:59:14 535

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除