自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

诺诺罗亚

敢试才有机会!

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

原创 uva 11389

题意 :有n个司机,n个下午线,n个晚上线,每个司机要跑一个下午线一个晚上线,若两线时间之和大于d ,则要支付加班费用(两线之和-d)*r问 最小费用        orz!!!!!!真心给跪了  我咋就不懂这是个什么定理呢   附ac代码#include#includeusing namespace std;int cmp(int a,int b){ return a>b;

2015-08-27 19:52:02 353

原创 HDU 3006

#include#includeint mark[1<<16];int main(){ int i,j,n,m,k,t,tot; while(scanf("%d%d",&n,&m)!=EOF) { memset(mark,0,sizeof(mark)); for(i=1;i<=n;i++) { scanf("%d",&t); tot=0; for(j=1

2015-01-29 18:36:53 570

原创 3306

#include&lt;stdio.h&gt;  #include&lt;string.h&gt;  int mark[1&lt;&lt;16];  int main()  {      int i,j,n,m,k,t,tot;      while(scanf("%d%d",&amp;n,&amp;m)!=EOF)      {          memset(mark,0,sizeof(mar...

2018-05-27 00:18:53 348

原创 HDU 4628 状态压缩

//又被题虐了MD#include#includechar ch[18];int dis[(1int min(int a,int b){if(areturn b;}int main(){int i,j,n,m;while(scanf("%d",&n)!=EOF){scanf("%s",ch);int len=strlen(ch);

2015-01-29 15:56:38 585

原创 HDU 3861 Prison Breake 状态压缩dp+BFS+二分答案

题意:机器人有一个初始能量x,每走到G点时可选择充满能量(初始能量是满的),每走一步消耗一点能量,问当x最小为多少时,可以把所有的Y都走一遍,输出最小的x!注意:G点和Y点加一起最多15个附ac代码#include#include#include#includeusing namespace std;char map[16][16];int dp[1<<16][16

2015-01-28 16:35:38 586

原创 POJ 2411Mondriaan's Dream

蛮水的状态压缩#include#includelong long dp[15][(1<<12)+10];int mark[(1<<12)+10];int tot;int fun(int w){ int k=0; while(w>0) { if((w&1)==1) { k++; } else { if((k&1)==1) return 0;

2015-01-26 19:58:11 457

原创 HDU 1025 Constructing Roads In JGShining's Kingdom

太强了 !!!!!!!!膜拜啊!!摘:链接:http://acm.hdu.edu.cn/forum/read.php?tid=15580&fpage=0&page=1假设存在一个序列d[1..9] = 2 1 5 3 6 4 8 9 7,可以看出来它的LIS长度为5。下面一步一步试着找出它。我们定义一个序列B,然后令 i = 1 to 9 逐个考察这个序列。此外,我

2015-01-26 15:58:39 541

原创 zoj 3471状态压缩DP

#include#includeint max(int a,int b){ if(a>b) return a; return b;}int dp[100000],map[15][15],mark[15];int main(){ int i,j,n,m,k; while(scanf("%d",&n)!=EOF&&n) { for(i=1;i<=n;i++) for

2015-01-23 21:36:19 543

原创 HDU 1160 FatMouse's Speed

sort排序一下就OK了啊ac代码#include#include#includeusing namespace std;struct node{ int num,w,s;}l[1010];struct asdf{ int xx,sum;}dp[1010];int cmp(node a,node b){ if(a.w!=b.w) retur

2015-01-23 18:35:44 330

原创 HDU 3001 Travelling 状态压缩dp+3进制

题意:一个人要旅行,他要去n个地方,且这n个地方每个地方最多可以走2次;给m条路径,寻问最短花费很明显的状态压缩,但是要求每个点最多只能走两次,就没办法标记当前点走过或是没走过,只能用三进制来表示1代表地点1被走过一次、2代表地点1被走过两次、 3(即10)代表地点2被走过一次、 4(即11)代表地点1被走过一次,地点2被走过一次、 5(即12)代表地点1被走过两次,地

2015-01-22 18:42:43 630

原创 POJ 3311 Hie with the Pie 状态压缩DP

题意:求从0点走到所有点又走回来的最短距离该题又很多做法,我用的是弗洛伊德+状态压缩先遍历所有点,求出两点间最短的距离,而后用状态压缩表示该点是否走过,(1附AC代码#include#includeint map[12][12];int dp[(1<<12)+1][12];int min1(int a,int b){ if(a<b) return a; return

2015-01-22 10:38:26 552

原创 POJ 1185 炮兵阵地 经典状态压缩DP

先说下我个人的理解啊!因为炮的攻击范围是上下左右两个格子  所以dp数组里面要保证存有第i行的状态和第i-1行的状态,一个三维数组搞定,同样判断的时候也要判断两行!其他的跟poj3254没什么区别!Description司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示)

2015-01-21 14:51:46 469 2

原创 poj 3254 Corn Fields

题意:给一个n*m的地图,地图只有1和0组成,0代表不可以放牧,1代表可以放牧;不能有相邻的牛,问有多少种放牧方法。经典状态压缩         用数组map作为地图用2进制来表示0代表不可以放牧,1代表可以放牧;通过x&x             通过x&y来判断在上一行满足题意的情况在当前行能否满足题意。个人认为状态压缩DP 刚开始蛮不好学的,但是愈战愈勇才是一个ACMer该有的品质!

2015-01-20 16:19:57 505

原创 poj 2528 离散化+线段树

这个破题  我WA 了   我实在找不到我那里错了题意:有一个墙,往墙上贴报纸,最后问能看到几张报纸其实就是很容易的线段树,不容易的地方在于离散化离散化要保存所有需要用到的值,排序后,分别映射到1~n,这样复杂度就会小很多很多这题的难点在于每个数字其实表示的是一个单位长度(并且一个点),这样普通的离散化会造成许多错误(包括我以前的代码,这题数据奇弱) 出下面两个简单的例子应该能体现普通

2015-01-12 15:56:59 483

原创 HUD 3466

题意就不解释了,要拥有足够的钱才能买对应价值的物品;这里应该按ss-cc排序  而不是按ss排序!因为for(j=m;j>=q[i].ss;j--){dp[j]=max1(dp[j],dp[j-q[i].cc]+q[i].vv);}        当j最小时可以写成  dp[j]=max1(dp[j],dp[q[i].ss-q[i].cc]+q[i].vv);  !!!!!!!

2015-01-12 15:44:50 505

原创 POJ 3468 A Simple Problem with Integers 线段树

感觉没什么好说的   就是简单地成段更新,还有区间询问!!!附AC代码#include#include#include#include using namespace std;long long tree[111111*4],lazy[111111*4];void fun(int i,int x){ if(lazy[i]!=0) { lazy[i*2]+=lazy[

2014-12-08 20:51:53 296

原创 HDU 1698 Just a hook 线段树(段更新,段询问)

In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. The hook is made up of several consecutive metallic sticks which are of the same length.线段树段更新!!!

2014-12-08 18:20:42 343

原创 POJ 2828 Buy Tickets

题意:N个人插队,每一个人会给你他要插到第几个位置,和他的价值;输出最后的顺序;思路:逆序,按照空位确定位置!!!附AC代码#include#includeusing namespace std;int tree[200000*4];struct node{ int tot,v;}num[200000];int ans[200000];void bulid(int l,

2014-12-04 21:45:06 333

原创 HDU 2795 Billboard

题意    有一个l*w的木板,给n个1*xi的木板,每次都放到最上边且最左边!思路    找到比xi大的,且最上边的木板。注意    l*w的木板,有l和w开数组  都会爆掉!!!而w太大没什么用  所以当w>n‘时  w=n;附AC代码#include#include#define LL(x) (x<<1)#define RR(x) (x<<1)|1#includeu

2014-12-02 21:51:12 314

原创 HDU 1671 字典树

先解释题意:给T组数据,每组数据有N个电话号码,要求每个电话号码不能是其他电话号码的前缀,若满足要求输出YES 否则输出NO一开始WA,看了下题解 觉得很复杂........且个人认为可以更简单些。。。。。。。。于是自己卡了半个小时 AC(这个故事告诉我们  不要总看题解,自己想的也不错,这也是一个ACMer应有的品质吧)就两个判断就OK了    1.当前串能不能作为其他串的前缀

2014-11-24 21:18:55 354

原创 HDU 1671 字典树+释放内存

#include#include#includetypedef struct node;struct node{ int num; int id; struct node *N[10];};struct node *root;int insert(char *s){ int i,j,n,m; n=strlen(s); i=0; struct node *p,*q;

2014-11-24 21:04:59 343

原创 HDU 3033 I love sneakers!

分组背包问题     注意两个if的顺序

2014-11-16 10:29:42 345

原创 HDU 1203 I NEED A OFFER!

#include#includedouble min(double a,double b){ if(a>b) return b; else return a;}int main(){ int i,j,n,m,c; double v; double dp[10010]; while(scanf("%d%d",&n,&m)!=EOF&&(n||m)) { for(i=

2014-11-16 10:15:54 351

原创 HDU 1978

题意:机器人只能#include#includeint map[150][150];int dp[150][150];int main(){ int i,j,n,m,ii,jj,t; scanf("%d",&t); while(t--) {  scanf("%d%d",&n,&m);  memset(dp,0,sizeof(dp));  dp[1

2014-11-12 21:37:13 788

原创 Poj--1466 Girls and Boys

/*题意大概就是 有n个人 编号0~n-1,人和人之间有直接联系问 最多可以有多少个没有直接联系的人因为一共只有n个人 可以把n变为2*n用匈牙利算法求最大匹配数x最多没有直接联系的人为 n-x/2; */#include#include#includeusing namespace std;int map[510][510];int m

2014-08-11 14:44:57 17269

原创 HDU 3078 Network LCA .

题意:n个点 m个询问,下面一行是n 个点的权值 再下面n-1行是双向的边然后m个询问:k u v 若k==0,则把u点的权值改为v,否则回答u->v之间最短路经过点的权值中  第k大的值是多少ac代码

2014-08-08 18:48:49 367

空空如也

空空如也

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

TA关注的人

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