- 博客(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
375

原创 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
590
原创 3306
#include<stdio.h> #include<string.h> int mark[1<<16]; int main() { int i,j,n,m,k,t,tot; while(scanf("%d%d",&n,&m)!=EOF) { memset(mark,0,sizeof(mar...
2018-05-27 00:18:53
365
原创 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
614
原创 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
603
原创 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
469
原创 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
566
原创 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
558
原创 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
347
原创 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
650
原创 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
568
原创 POJ 1185 炮兵阵地 经典状态压缩DP
先说下我个人的理解啊!因为炮的攻击范围是上下左右两个格子 所以dp数组里面要保证存有第i行的状态和第i-1行的状态,一个三维数组搞定,同样判断的时候也要判断两行!其他的跟poj3254没什么区别!Description司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示)
2015-01-21 14:51:46
486
原创 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
516
原创 poj 2528 离散化+线段树
这个破题 我WA 了 我实在找不到我那里错了题意:有一个墙,往墙上贴报纸,最后问能看到几张报纸其实就是很容易的线段树,不容易的地方在于离散化离散化要保存所有需要用到的值,排序后,分别映射到1~n,这样复杂度就会小很多很多这题的难点在于每个数字其实表示的是一个单位长度(并且一个点),这样普通的离散化会造成许多错误(包括我以前的代码,这题数据奇弱) 出下面两个简单的例子应该能体现普通
2015-01-12 15:56:59
504
原创 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
520
原创 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
312
原创 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
356
原创 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
350
原创 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
342
原创 HDU 1671 字典树
先解释题意:给T组数据,每组数据有N个电话号码,要求每个电话号码不能是其他电话号码的前缀,若满足要求输出YES 否则输出NO一开始WA,看了下题解 觉得很复杂........且个人认为可以更简单些。。。。。。。。于是自己卡了半个小时 AC(这个故事告诉我们 不要总看题解,自己想的也不错,这也是一个ACMer应有的品质吧)就两个判断就OK了 1.当前串能不能作为其他串的前缀
2014-11-24 21:18:55
366
原创 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
360
原创 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
361
原创 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
804
原创 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
19866
原创 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
383
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人