自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 ural1007 Code Words (字符串处理)

三种情况分别对应m n。然后对每一位进行枚举判断即可。有几个地方要注意一下:1. 对于n = m的情况,只能将1改为0,而不能将0改为1。2. 数据中字符串的数目并不是n。3. 可能原字符串就是正确答案(样例中已经包含了这种情况)。#include using namespace std;char s[3010], ss[3010];bool IsOk(char *s,

2017-02-26 15:24:32 296

原创 ural1010 Discrete Function

不难发现倾角最大的肯定是相邻两点。#include using namespace std;typedef long long LL;const int N = 100005;LL a[N];int main() { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%lld", &a[i])

2017-02-24 00:50:30 256

原创 ural1009 K-based Numbers (递推)

设f[i][0]表示取了i个数最前面的数为0的合法数的数量,f[i][1]表示取了i个数最前面的数不为0的合法数的数量则f[i][0] = f[i - 1][1]f[i][1] = (k - 1) * (f[i - 1][0] + f[i - 1][1])边界条件f[1][0] = 1f[1][1] = k - 1(代码中习惯性地使用dp作为数组名,不用在意)#

2017-02-23 20:54:09 259

原创 ural1005 Stone Pile (枚举)

枚举n个石头的状态(即分在左还是右),然后找到答案最小的状态。#include using namespace std;int a[25];int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); int ans = 0x3f3f3f3f;

2017-02-22 22:58:05 361

原创 ural1017 Staircases (动态规划)

设dp[i][j]表示使用i个砖块,最后一个台阶的方块数量为j的不同方案数(先不考虑条件Every staircase consists of at least two steps)那么状态转移方程即为dp[i][j] = ∑dp[i-j][k]  (0 最后考虑每个楼梯都必须包含至少两层,这时只需要最终答案减1便可#include using namespace std;typ

2017-02-22 19:59:06 697

原创 ural1014 Product of Digits (枚举)

从9到2对原来的数进行试除,除完之后若不等于1,则无解,否则将之前的试除出来的因子从小到大输出。特殊情况:0的时候为10,1的时候为1。#include using namespace std;int a[100];int m;int main() { int n; scanf("%d", &n); if (n == 0) { printf("10\

2017-02-22 19:15:46 163

原创 ural1028 Stars (树状数组)

因为数据中的y坐标已经是安照升序排序,所以可以完全不用考虑y,只考虑x。由于之前的y坐标都小于等于当前的,后面的肯定也不会等级比当前点低,所以我们只需要统计之前的点中x坐标小于等于当前点的有多少个,这种的话,可以很容易想到使用树状数组来维护。#include using namespace std;const int N = 320005;int sum[N], ans[N];in

2017-02-22 17:14:08 631

原创 ural1001 Reverse Root (递归)

读入时可以直接使用long long的读入,会自动跳过空格由于输出是反方向的,这时我们便可以利用递归的特性来输出#include using namespace std;void Read() { long long x; if (scanf("%lld", &x) != EOF) { Read(); printf("%.4f\n",

2017-02-17 16:05:12 290

原创 ural1000 A+B Problem

#include using namespace std;int main() { int a, b; scanf("%d%d", &a, &b); printf("%d\n", a + b); return 0;}

2017-02-17 16:01:42 220

原创 poj2342 Anniversary party (树形DP)

题意(翻译来自hust vj)一棵树有n个结点,每个结点有一个权值,一个结点和其直接的父亲结点不能同时选,求按照要求所能选到的点权和的最大值解法设dp[i][0]表示不取i节点的i子树的最大权值和,dp[i][1]表示取i节点的i子树的最大权值和设v是u的子节点,则dp[u][0] = Sum(max(dp[v][0], dp[v][1]))dp[u][1] = v[u]

2017-02-09 14:40:10 175

原创 linux下Mysql5.5版本的编码修改为utf-8

今天修改mysql编码时各种mysqld.sock文件不存在,然后最后才知道原来网上的很多教程的mysql都是老版本的配置,5.5版本开始好像已经不一样了。知道真相的我好心塞下面是linux下5.5版本的修改编码方法首先用如下命令find / | grep my.cnf查看mysql配置文件的位置然后vim打开在client部分添加default-cha

2016-12-05 19:25:53 1398

原创 codeforces715A Plus and Square Root (构造)

题意:初始数为2,初始等级为1,有如下两种操作:1. 这个数加上当前等级k2. 这个数开根号,但前提是这个数是完全平方数且开完根号后为下一等级(k+1)的倍数。该操作之后等级+1要求对于2, ......, n+1等级输入从上一等级到该等级的第一个操作的次数答案不唯一,输出任一一个即可类型:数学构造题构造方法:假设当前等级为k,那我们只需要第一种

2016-10-28 17:22:10 264

原创 hdu5558 Alice's Classified Message (后缀数组)

后缀数组首先计算出sa, rank, height数组,易知,不妨设x, y(rank[x] 利用这个这个性质,便很容易在枚举的时候做出一些剪枝:假设当前位置为p,则可以从rank[p]开始分别向两边进行枚举,当枚举到minHeight 这样的话可以在1s内运行完#include #include #include using namespace std;//后缀

2015-11-14 17:37:44 928

原创 hdu5550 Game Rooms (动态规划)

表示制杖,参考了一下别人的题解,做完发现自己整个人都不好了,竟然没有发现这么弱的dp方程,(我不知怎么的,一开始居然想了一个n^3的dp方程)设dp[i][s]表示计算到第i个且将其放在该段的最后一个,这一段全为s(0和1分别表示两种运动)那么dp方程就是dp[i][s] = min{dp[j][s^1] + valueSum(j+1, i)},  j valueSum(i, j)表示

2015-11-07 18:14:30 1175

原创 hdu5521 Meeting (最短路)

最短路我的构图方式是:将每个集合也抽象成一个点,将集合中的每个点向集合连一条权值为t的有向边,集合向其中的每个点连一条权值为0的有向边,这样 以1和n为起点各做一遍最短路。枚举中间点便可以得到最后答案了。#include #include #include #include using namespace std;struct Edge{ int v;

2015-11-02 12:20:17 305

原创 hdu5536 Chip Factory (暴力+优化)

暴力+优化话说网上有字典树的正规解法,不过hdu重现赛时并不会,于是直接暴力了。优化方式直接在代码注释中标注了,这里不详解了。#include #include using namespace std;const int MAXN = 1005;int a[MAXN];inline int lowbit(int x){ return x & -x;}i

2015-11-01 21:44:29 1114

原创 sgu482 Impudent Thief (动态规划)

设dp[i][j]为最后一个放i,周长为j所拿走的木板总高度dC(i, j)表示i与j放在一起,周长的改变量这样dp方程如下dp[k][j + dC(i, k)] = max{dp[i][j] - h[k]} , k > i时间复杂度为O(n^2*C),即O(n^3*h)#include #include #include #include using namesp

2015-10-26 18:22:27 423

原创 codeforces589B Layer Cake (动态规划)

首先,有一点可以很容易判断出,那就是短边一定和短边在一起,长边一定和长边在一起。所以这里就不妨设a接下来将所有长方形按照a从大到小排序(因为长边一定不会对短边造成影响,以使得其满足无后效性)设dp[i][j]表示最后一个放i,高度为j的最大宽度,则dp[i][j] = min(b[i], max{dp[k][j-1]}),  k 事实上可以再增加一个额外的数组maxValue[

2015-10-25 23:03:40 447

原创 poj3476 A Game with Colored Balls (优先队列,链表)

每次取最长的最左边一段,可以使用优先队列来实现。而对于每次删除一段则可以使用链表来实现,事实上这里使用数组来模拟链表会有更好的效果。而且最后的评测使用g++会tle(应该是我代码萎了),使用c++可以过。#include #include #include using namespace std;struct Node{ char c; int pos, len; Node(

2015-10-25 12:36:40 400

空空如也

空空如也

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

TA关注的人

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