2014年3月20日

Codeforces 404E: Maze 1D(二分)

摘要: 题意:指令“R”机器人会向右走一步,“L”是向左。起初机器人在0位置,可以在除了0以外的任何位置放障碍,如果机器人的指令将使它走到障碍上,那这一步他会保持不动。要求让机器人最终结束的那一步一定只走过一次,也就是最后一次,这样称为完成指令。求在放障碍最少的情况下,能使机器人完成指令的方案数。方法:我去,这题意略长啊。最开始从细节分析,然后枚举情况,感觉挺简单的,然后……就没有然后了……后面枚举情况的时候,好复杂,感觉怎么都想不全(至少短时间想不全诶)然后看解题宝宝。(是报告)额,原来可以用模拟+二分解决~真是暴力的思路呀,不过没有发现它的二分性质~诶,以后要从暴力的方面先想象咯,或者,太复杂的时 阅读全文

posted @ 2014-03-20 22:29 ShineCheng 阅读(313) 评论(0) 推荐(0) 编辑

2014年3月19日

POJ 3468:A Simple Problem with Integers(线段树[成段更新])

摘要: 题意:N个数Q次操作。一共两种操作:Q l r :询问[l,r]这个区间里的数字和,C l r c: [l,r]区间里的每个数都加上c。1 ≤ N,Q ≤ 100000.方法:线段树的成段更新。注意懒惰标记。这只是为了有个模板。易错点在代码中以下划线标注。//16:06#include #include #define N 100010#define lson l, mid, rt mid) update(L,R,v,rson); pushUp(rt);}long long query(int L, int R, int l, int r, int rt) { if (L mid... 阅读全文

posted @ 2014-03-19 17:16 ShineCheng 阅读(166) 评论(0) 推荐(0) 编辑

2014年3月18日

Codeforces 403D: Beautiful Pairs of Numbers(DP)

摘要: 题意:转换模型之后,就是1~n个数中选k个,放到一个容量为n的背包中,这个背包还特别神奇,相同的物品摆放的位置不同时,算不同的放法(想象背包空间就是一个长度为n的数组,然后容量为1的物体放一个格子,容量为n的物体放在相邻的n个格子里。问方案数。方法:选k个物品放在背包中有多少种放法。然后就是k个物品放了以后,还剩下几个空位,空位的位置不同,则方案数也不同。所以要求出几个空位放在几个地方有多少方案数最后相乘,再乘上阶乘就好了。#include #include #include #define mod 1000000007long long dp[1010][55];int ans[1010][ 阅读全文

posted @ 2014-03-18 19:50 ShineCheng 阅读(507) 评论(0) 推荐(0) 编辑

2014年3月17日

HDU 1394:Minimum Inversion Number(树状数组,线段树)[水]

摘要: 题意:有0~n-1这n个数,以一定的排列。这个排列可以循环,就是可以把第一个拿到最后,然后形成新的排列。问这些排列中的逆序对最小值。思路:最后的循环,拿走一个之后,新的逆序对数 newsum = oldsum - nowni + ((n-1)-nowni)其中 ,nowni表示这个数所构成的逆序对数。Nowni = 原数列中此数往后构成的逆对数 + 原数列中此数往前构成的非逆对数。然后那两个辅助数组,就可以用扫描循环,然后求前面(或后面)比现在这个数大的(或小的)的数有多少。典型的树状数组。为了练习线段树,所以写了。//18:34//18:53//19:02//19:08 过#include 阅读全文

posted @ 2014-03-17 19:35 ShineCheng 阅读(158) 评论(0) 推荐(0) 编辑

2014年3月16日

训练赛占位……

摘要: 诶。做了一天水题…… 阅读全文

posted @ 2014-03-16 20:32 ShineCheng 阅读(88) 评论(0) 推荐(0) 编辑

2014年3月15日

HDU 1754:I Hate It(线段树-单点更新)

摘要: 题意:1~N这些人有一些分数,之后有M条操作。要求支持两种操作:更新其中某个人的成绩,查询[A,B]区间内的人的最高成绩。 ( 0#include #include using namespace std;#define N 200020#define lson l, mid, rt mid) ans = max(ans, query(L,R,rson)); return ans;}void update(int pos, int v, int l, int r, int rt) { if (l == r) { tree[rt] = v; return;... 阅读全文

posted @ 2014-03-15 12:55 ShineCheng 阅读(142) 评论(0) 推荐(0) 编辑

2014年3月14日

[专题总结]数位DP

摘要: 总结:1:第i个数符合要求了,所以接下来的数都可以。如果没限制, 那么是有 10i-1 个。如果有限制,那么是 (nowx % 10i-1)+1 。2:两种状态设置 有设状态d 没设状态d含义 d开头的i位数.. 所有i位数..写法差别 end = ...?num[i-1]:9 end = ...?num[i]:9注意点 / 在循环中出现即时计算时,判断限制的条件为(isQuery && j==end)3:此类DP,考虑转移的时候,应当 同时考虑查询 时候的情况4:这里的记忆化搜索不太一样喔, 出口一定... 阅读全文

posted @ 2014-03-14 20:32 ShineCheng 阅读(143) 评论(0) 推荐(0) 编辑

UPC 2223: A-Number and B-Number(数位DP+二分)

摘要: 积累点:1: (l&r)+((l^r)>>1) == (l+r)/2 2: 注意判断现在是否有限制。当枚举下一个量时,是(isQuery && j==end),不要搞错。传送门:http://acm.upc.edu.cn/problem.php?id=2223题意:能被7整除或者含7的数称为A-Number,所有A-Number从小到大写好,下标编号(从1开始),去掉那些下标为A-Number的数,剩下的数称为B-Number。求第N个B-Number是多少。思路:求A-Number就是简单的数位DP。dp[i][mod] 表示所有i位数中,%7==mod 阅读全文

posted @ 2014-03-14 20:18 ShineCheng 阅读(402) 评论(0) 推荐(0) 编辑

LightOJ - 1032 Fast Bit Calculations (数位DP)

摘要: 类型:数位DP题意:[0,N]范围内所有数的二进制表示,问出现"11"的次数。(“111”计为两次) (0 ≤ N #include int num[50];long long dp[50][2];long long nowx;long long dfs(int i, int d, bool isQuery) { if (i == 1) { return 0; } long long &nowdp = dp[i][d]; if (!isQuery && ~nowdp) return nowdp; int end = isQuery?num[i-1]: 阅读全文

posted @ 2014-03-14 14:25 ShineCheng 阅读(224) 评论(0) 推荐(0) 编辑

HDU 4734: F(x) (数位DP)

摘要: 总结:去数字那维的方法,就是改成循环里面枚举当前位(之前的做法是枚举下一位)抽象出口,可以从前一个有意义的状态来推导出其意义。类型:数位DP题意:F(x) = A n * 2 n-1 + A n-1 * 2 n-2 + ... + A 2 * 2 + A 1 * 1.问[0,B]之间满足F(x) num[i])定义:dp[i][f] 表示所有i位数中(含前导0),F() #include int dp[12][10000];int num[30];int getf(int x) { int ans = 0; int len = 0; while (x) { a... 阅读全文

posted @ 2014-03-14 12:07 ShineCheng 阅读(185) 评论(0) 推荐(0) 编辑

导航