自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

原创 HDU 3033 分组背包

给出N个物品,M金钱,W种类给出N个物品的性质:所属种类,花费,价值求每一种类物品至少一个的前提下,所能购买到的最大价值dp[i][k]表示在第i种物品,总花费为k的最大价值 dp[i][k]=Max(dp[i][k],dp[i][k-a[i][j].p]+a[i][j].v);dp[i][k]=Max(dp[i][k],dp[i-1][k-a[i][j].p]+a[i

2014-11-19 16:52:24 668

原创 HDU 3316 爆搜水题

爆搜水题模拟扫雷,规则和扫雷一样给出原图,求在X,Y位置点一下以后的图形,没有弹出的点输出-1,弹出的点输出这个点的数字从起始点DFS一下即可#include "stdio.h"#include "string.h"int dir[8][2]={ {-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1} };int n;i

2014-11-19 13:16:51 856

原创 HDU 3449 有依赖的01背包

给出n个盒子,和总钱数w对于n个盒子,首先买盒子需要花费m,然后可以买盒子中的物品,每个物品分别有其花费a[i].w和价值a[i].v典型的有依赖的01背包mark存储前i-1个盒子的dp值然后对于当前盒子,先不考虑其盒子的花费进行01背包然后对于mark数组的得到的每个新值mark[i},去更新dp[i+a[i].m];#include "stdio.h"

2014-11-19 12:29:53 837

原创 HDU 3466 01背包变形

给出物品数量N和总钱数M对于N个物品,每个物品有其花费p[i], 特殊值q[i],价值v[i]q[i] 表示当手中剩余的钱数大于q[i]时,才可以买这个物品首先对N个物品进行 q-p的排序,表示差额最小的为最优,优先考虑放入这个物品然后01背包计算#include "stdio.h"#include "string.h"#include "algorithm

2014-11-19 10:53:25 764

原创 HDU 3591 多重背包

给出N种钱币和M给出N种钱币的面值和个数NPC拿着这N些钱币去买价值M的物品,可以多付,然后被找零,找零的钱也为这些面值,但没有数量限制问最少经手的钱币数量对于NPC做一个付款多重背包然后对于找零做一个完全背包 ans=Min(dp1[i]+dp2[i-m],ans);#include "stdio.h"#include "string.h"in

2014-11-18 20:57:08 835

原创 HDU 2844 多重背包模板

给出n个数和m每个数给出出现次数和价值,问任意组合组成不大于M的价值,共能产生多少个数多重背包的的二进制优化写法  模板mark一下二进制优化原理:1、2、4可以组合出所有小于8的数;1、2、4、8可以组合出所有小于16的数;1、2、4、8、16可以组合出所有小于32的数; ……#include "stdio.h"#include "strin

2014-11-18 20:03:04 695

原创 HDU 3853 期望概率DP

期望概率DP简单题从[1,1]点走到[r,c]点,每走一步的代价为2给出每个点走相邻位置的概率,共3中方向,不动: [x,y]->[x][y]=p[x][y][0] ,  右移:[x][y]->[x][y+1]=p[x][y][1];  左移:[x][y]->[x+1][y]=p[x][y][2];问最后走到[r,c]的期望dp[i][j]为从[i][j]点走到[r][c]的期望

2014-11-18 15:51:43 736

原创 HDU 4405 概率期望DP

有 0到 n 个格子,掷骰子走路,求出到终点的数学期望,有飞行的路线。dp[i] 存储在i位置走到终点的期望,转移方程dp[i]=(dp[i+1] ----> dp[i+6])/6+1;  有飞行路线则直接赋值#include "stdio.h"#include "string.h"double dp[100010];int hash[100010];int ma

2014-11-18 14:37:40 709

原创 HDU 4546 优先队列

用优先队列BFS一遍即可,每个节点分别记录 当前难度,加上下一个以后的难度,和下一个为哪道题队列优先弹出加上下一个以后难度最小的#include "stdio.h"#include "string.h"#include "algorithm"#include "queue"using namespace std;struct node{ int now,next,

2014-11-18 12:38:41 935

原创 HDU 5107 线段树扫描线

给出N个点(x,y),每个点有一个高度h给出M次询问,问在(x,y)范围内第k小的高度是多少,没有输出-1 (k线段树扫描线首先离散化Y坐标,以Y坐标建立线段树对所有的点和询问进行离线操作,将询问和点按照x,y的大小排序,从左向右,从下向上,对于相同的(x,y)插入点在询问点之前线段树的每个节点维护10个高度,每次询问[0,mark[i].y]的第mark[i].h高的

2014-11-17 16:53:26 1036 5

原创 HDU 1030 数学题

给出两点,求这两点在图上的最短路径分别以最上,左下,右下为顶点,看这个三角图形ans=这三种情况下两点的层数差#include "stdio.h"#include "string.h"#include "math.h"int main(){ int n,m,sn,sm,rn,rm,ln,lm,ans; while (scanf("%d%d",&n,&

2014-11-16 17:48:02 681

原创 HDU 4815 背包

题意是给出N道题,和一个概率P,然后给出每道题对应的得分x(每道题只有两个选项,一个正确一个错误)。两个人来答题,一个人是随机选择答案,问另一个人至少要答多少分才能保证有P的概率不会失败。01背包,最大分数为40000,01背包处理,记录这40000个分数出现的次数然后从小分数遍历一边即可#include "stdio.h"#include "string.h"

2014-11-15 20:45:40 1159

原创 HDU 5101 水二分

给定一些集合,选择两个来自不同集合的数,加和大于k,问有多少种选择方案。ans=从所有数中选择的两个加和大于k的数的方案数-在同一个集合中选择的两个加和大于k的数的方案数对所有数据排序后二分找即可#include "stdio.h"#include "string.h"#include "algorithm"using namespace std;struct n

2014-11-14 15:12:01 779

原创 HDU 4778 记忆化搜索&状压

给出G种宝石,B个包,和S,S代表到时候每种颜色的宝石凑齐S个能变成一个魔法石每个包里有N种宝石,分别为c1,c2.......然后两人轮流拿包,每个包只能拿一次,拿出包把宝石放地上。如果能变成魔法石则拿走魔法石,下一次还这个人拿包,没变成则换人。魔法石的个数就是获得分数,问两人最优的时候分差是多少。状压记忆化搜索一共21个包,状压存当前取包的状态无论怎样取

2014-11-08 18:10:54 734

原创 HDU 2461 线段树扫描线

给出N个矩形,M次询问每次询问给出R个,问这R个矩形围成的面积经典扫面线求面积并,对每次询问的R个点离散化一下#include "stdio.h"#include "string.h"#include "algorithm"#include "map"using namespace std;mapmp;struct P{ int x1,y1,x2,y2

2014-11-08 14:38:52 1009

原创 HDU 4770 DFS&状压

一个n*m的房间有的房间是可破坏的,其他不可破坏,现在给你一些L型的灯,其中只有一个可以旋转,其他不能,让你用最少的灯覆盖所有的可破坏区域,且不能覆盖不可破坏的区域。枚举旋转的灯,对剩下的DFS即可,状压存储已经被点亮的灯#include "stdio.h"#include "string.h"struct P{ int x,y;}p[21];int ans,n,m,

2014-11-05 12:58:04 663

原创 HDU 4771 BFS&状压 水

n*m矩阵,起点@,从矩阵中拿k个物品的最小代价水BFS#include "stdio.h"#include "string.h"#include "queue"using namespace std;int b[]={1,2,4,8,16};int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};struct node{ i

2014-11-05 10:44:45 846

原创 hdu 1244 DP

水DP dp[i%2][j]=Max(dp[i%2][j-1],dp[1-i%2][j-l[i]]+sum[j]-sum[j-l[i]]);#include "stdio.h"#include "string.h"int Max(int a,int b){ if (a<b) return b; else return a;}int dp[2][1010

2014-11-04 10:39:06 919

原创 HDU 1243 DP

思路和1080一样题目有几个坑:范围要开到2010,题目没有给子弹数量和恐怖分子出现的字符串长度不一定相等用memset会超时#include "stdio.h"#include "string.h"int dp[2010][2010],a[2010];int Max(int a,int b,int c){ int

2014-11-04 10:13:23 763

原创 HDU 1080 DP

匹配两个人相似度。A,G,C,T,每两个都会有一个对应的值,给出两串基因,长度可以不一样,可以在基因中间加_使两串长度一样,然后有一个对应值,求最大对应值。先做出对应的表DP方程:x=dp[i-1][j-1]+hash[str_a[i-1]][str_b[j-1]];y=dp[i-1][j]+hash[str_a[i-1]]['-'];z=dp[i][j-1]+hash[str

2014-11-03 21:31:18 691

原创 HDU 4107 线段树

给出N个节点,M次操作,和p每次操作 对l-r区间的每个节点+c,若节点值>=p,则加2*c;结点存当前区间伤害最小值,最大值,以及lazy操作。更新到如果最小值大于等于P,或者最大值小于P为止。#include "stdio.h"#include "string.h"struct node{ int l,r,Min,Max,lazy;} data

2014-11-03 17:39:58 750

原创 HDU 3874 离线线段树

统计区间内所有数字和,对于重复出现的只统计一次线段树的离线算法 按结束坐标排序,然后扫一遍,遇到重复的,就把之前插入线段树的给删掉#include "stdio.h"#include "string.h"#include "algorithm"using namespace std;struct node{ int l,r; __int64 sum;

2014-11-03 16:37:09 771

原创 HDU 5092 DP

DP水题求从上到下走完,使所取得权值最小,并输出路径,若有多个满足,则输出靠右的#include "stdio.h"#include "string.h"int inf=0x3f3f3f3f;struct node{ int x,y;}dp[110][110];int main(){ int Case,ii,i,j,n,m,ans; int

2014-11-02 18:47:35 1217

原创 HDU 5091 线段树扫描线

给出N个点,和一个w*h的矩形给出N个点的坐标,求该矩形最多可以覆盖多少个点对每个点point(x,y)右边生成对应的点(x+w,y)值为-1;纵向建立线段树,从左到右扫描线扫一遍,遇到点则用该点的权值更新区间(y,y+h)#include "stdio.h"#include "string.h"#include "algorithm"using namespace

2014-11-02 18:42:18 1409

原创 HDU 5094 状压BFS

给出n*m矩阵给出k个障碍,两坐标之间存在墙或门,门最多10种,给出s个钥匙位置及编号,相应的钥匙开相应的门状压BFS即可,注意有可能同一个位置有多个门或者多个钥匙#include "stdio.h"#include "string.h"#include "queue"using namespace std;int b[]={1,2,4,8,16,32,64,12

2014-11-02 18:35:34 1071

原创 HDU 4431 模拟

2012 Asia Tianjin Regional Contest纯模拟胡麻将十三幺,七对子(对子不能有重复),最普通的胡法给出已有的13张牌,然后问有多少种胡法,输出所需牌枚举所有的牌,对已有的14张牌,先判断十三幺和七对子然后枚举用每一个对子当将,然后胡牌对于c判断是否都为3或者0对于m,s,p每种花色从左到右判断若>=3则-=3,若==1 || ==2

2014-11-01 14:56:38 956

原创 HDU 4438 水

2012 Asia Tianjin Regional Contest 水题模拟两种情况(Alice先选tiger或者Alice先选wolf)算出来比一下大小就行了。#include "stdio.h"int main(){ int Case; double a,b,p,q,ans1,ans2; scanf("%d",&Case); whi

2014-11-01 13:46:11 1120

原创 HDU 4432 水暴力

2012 Asia Tianjin Regional Contest 水题暴力#include "stdio.h"#include "string.h"#include "math.h"int main(){ int n,m,ans,i,mark; int a[1001]; while (scanf("%d%d",&n,&m)!=EOF) {

2014-11-01 13:24:50 715

空空如也

空空如也

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

TA关注的人

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