自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

梦幻的蔷薇色

迁移至新博客:hiyongheng.cn-------我也向往蔷薇色的生活啊,可我是灰色的。

  • 博客(44)
  • 资源 (8)
  • 收藏
  • 关注

原创 51nod 1556 计算(默慈金数)

这题要用到默慈金数,又涨知识了。 默慈金数:http://blog.csdn.net/acdreamers/article/details/41213667 题解:http://blog.csdn.net/qingshui23/article/details/52068031 在这里默慈金数是用来排除错误走法的。当时我没想明白为啥错误的走法是M[n-2],就在51nod问了一下,回答如下:

2017-05-31 15:12:05 450

原创 51nod 1799 二分答案

这题wa的我老心疼了,wa好几发后才发现二分的时候把比较的俩数写反位置了 思想不难,首先计算能使m在位置k有多少种排列方案,然后除以所有的排列方案,也就是n!,然后再乘n!,最终就是计算是m在位置k有多少中方案。如果要使二分能确定m在位置k,则二分的时候每次比较的mid位置的值要么比m大,要么比m小,mid的位置一共就那么几个,假设个数是cnt,计算出cnt后,先算出来这几个位置符合条件的方案的总

2017-05-31 14:41:45 534

原创 51nod 1503 猪和回文(dp)

先放大神题解:http://www.cnblogs.com/mgz-/p/6736498.html 这种题目对我等蒟蒻来说真是烧脑,还想不出。。。题解讲的很清晰#include <cstdio>#include <cstring>const int mod = 1e9+7;const int MAXN = 510;int n,m;int dp[2][MAXN][MAXN];char G

2017-05-30 20:04:07 431

原创 51nod 1678 lyk与gcd

容斥原理。看完题唯一的想法就是暴力 后边的相关讨论里讲解的很详细,代码也是看的讲解这个题目的那人的,花了我60点头盾呢。。。。 对于容斥原理,我也仅限于用纸笔计算离散数学课本后边那种数据量极小的题目,却不会用代码来算。。#include <iostream>#include <algorithm>#include <cmath>using namespace std;const int M

2017-05-29 20:17:19 608 3

原创 Codeforces Round #416 (Div. 2) C. Vladik and Memorable Trip(dp)

昨天下午看这个题的时候,看了半个多小时没看懂啥意思,第四题也看了半个多小时,没看懂 今天搜了下题解,看懂了。 看懂意思就好说了,dp嘛。然后开始码代码,三重循环筛合法区间,然后dp,超时了。然后想怎么优化,想了一个多小时才想到。。 状态转移方程好找,感觉就难在筛选合法区间。。 dp[i]表示前i个数字的最大值 dp[i] = max{dp[i],{dp[j]+value[j-i]| j >

2017-05-28 15:28:08 395

原创 Codeforces Round #416 (Div. 2) B. Vladik and Complicated Book

#include <iostream>#include <algorithm>using namespace std;const int MAXN = 1e4+10;int num[MAXN];int main(){ cin.sync_with_stdio(false); cin.tie(false); int n,m; cin >> n >> m;

2017-05-28 10:55:18 269

原创 Codeforces Round #416 (Div. 2) A. Vladik and Courtesy

向来都是暴力的#include <iostream>#include <algorithm>using namespace std;int main(){ cin.sync_with_stdio(false); cin.tie(false); int a,b; cin >> a >> b; int der = 0; while(true)

2017-05-28 10:40:40 212

原创 51nod 1243 排船的问题

二分,分了老半天也没分出来结果,只好跑去找题解 参考:http://www.cnblogs.com/TheRoadToTheGold/p/6421882.html 这题还有O(n)解法,后边讨论里说可以转化成最大子段和。。。using System;using System.IO;namespace ConsoleApplication1{ class Program {

2017-05-25 18:48:37 401

原创 51nod 1120 机器人走方格 V3(卡特兰数,lucas定理)

卡特兰数+lucas定理#include <iostream>#include <string.h>#include <stdio.h>using namespace std;typedef long long LL;LL n,p=10007;LL quick_mod(LL a, LL b){ LL ans = 1; a %= p; while(b) {

2017-05-24 14:57:09 674

原创 51nod 1639 绑鞋带

画几下就会发现有规律 有n根鞋带,不成环的概率就是(2*n-2)/(2*n-1)*(2*n-2-2)/(2*n-1-2)-(2*n-2-2-2)/(2*n-1-2-2)****1;#include <iostream>#include <algorithm>using namespace std;int main(){ int n; cin >> n; int cnt

2017-05-24 12:20:55 241

原创 51nod 1043 幸运号码(dp)

看完题就想到了数位dp,但怎么处理却是一脸懵逼,那就去看题解咯 dp[i][j]表示i位数字的和为j的组合数 dp[i][j] = ∑dp[i-1][j-k],(k=0,1…9)。(包含前导0) dp[i][j]-dp[i-1][j]就是dp[i][j]去掉前导0的组合数#include <iostream>#include <algorithm>#include <cstring>u

2017-05-23 19:07:43 358

原创 51nod 1101 换零钱

dp[i]表示i分钱换零钱的方案数 dp[i] = {dp[i-coin[1]]+dp[i-coin[2]]+…+dp[i-coin[13]]} 那个双重循环内外的顺序刚写的时候写反了。调了调,发现有重复计算,再把循环的内外顺序换一下,就好了#include <iostream>#include <algorithm>using namespace std;typedef long lon

2017-05-23 17:50:22 264

原创 Codeforces Round #415 (Div. 2) C. Do you want a date?

有一个集合S={1,2,3,4,5,6},他的一个子集的最大值是4,最小值是1,则这样的子集的个数是2^2,因为最大为4最小为1的集合最大是{1,2,3,4},1,4固定了,剩下的就是{2,3}的子集的个数了,{2,3}有2^2个子集,所以。。。。 假设一个集合,已经从小到大排序好了,则他的子集中最小为num[i],最大为num[j] (i < j) 的集合的个数为2^(j-i-1),即2^k(k

2017-05-22 16:23:27 329

原创 Codeforces Round #415 (Div. 2) B. Summer sell-off

贪心。 用结构体保存的struct node{ ll k,l,val;};本来是在输入的时候令val=2*k,然后按照val从大到小排序,按条件选取,在test15那里错了,后来就想啊想,令val=l-k或者val=2*k-k,val就表示商品翻倍那天额外多赚的,然后在按照val从从大到小排序,就过了,之前那种排序方式排在前面的并不一定是额外赚的多的#include <iostream

2017-05-22 16:00:39 340

原创 Codeforces Round #415 (Div. 2) A. Straight «A»

这次竟然在夜里两点多才开,熬不到。。。。 暴力水过#include <cstdio>#include <cstring>int n,k;float sum;int mark;bool check(int cnt){ int score = (int)(sum/(cnt+n)+0.5); if(score == k) return true; retu

2017-05-22 15:51:20 353

原创 51nod 1627 瞬间移动

看蓝色那部分,可以看到是个杨辉三角,可以用杨辉三角做。我想是去掉第一行和第一列,这个题就和机器人走方格那个题基本一样了,解法也相同#include <iostream>#include <algorithm>using namespace std;typedef long long ll;ll n,m;const int mod = 1e9+7;ll extend_gcd(ll a, ll

2017-05-21 19:23:41 351

原创 51nod 1154 回文串划分(dp)

刚开始看没啥思路,看讨论里有说有manacher+dp过的,就想到了点思路,可是manacher是记录的以某个字符为中心的回文串的半径,而且由于填充了#等字符,再去掉这些填充字符时,那些数值再对应到字符串上就不对了,索性就直接从j~i暴力判断回文了,反正数据量也不大。 先定义状态,dp[i]表示0~i这个子串最少能划分为几个回文串,0<=j<=i,如果j~i(包括j这个位置的字符)是一个回文串的话

2017-05-20 21:40:34 281

原创 51nod 1383 整数分解为2的幂

画画,找规律。。。 dp[n]表示n的划分方法。 当n为奇数的时候,dp[n]=dp[n-1],n-1每种分解后边都加上一个1就是了。 当n为偶数的时候,dp[n]=dp[n-1]+dp[n/2],n-1的每种分解都加一个1,这是一种情况,因为n是偶数,还有把1合并成2,把2合并成4的情况,这时候多出的这部分分解后的最小单位是2,分解个数最多的就是n/2个2,把这些数字全部都除以2,正好就是n

2017-05-17 12:35:11 368

原创 51nod 1024 矩阵中不重复的元素

数据量很小,直接暴力,,先取对数再暴力。#include <iostream>#include <set>#include <cmath>using namespace std;int main(){ set<double> sets; ios::sync_with_stdio(false); int m,n,a,b; cin >> m >> n >> a >

2017-05-16 20:58:47 290

原创 51nod 1020 逆序排列(dp)

想破脑袋也想不到。。。。 先定义状态,dp[i][j]表示i个数字的全排列中逆序数为j的序列的个数 刚开始做的时候,拿笔画了一会,凭着感觉蒙了个状态转移方程:dp[i][j]=dp[i-1][j]+dp[i][j-1]+dp[i-1][j-1],试了下果然蒙的不可靠。。就去看讨论了,找到正解。。#include <cstdio>#include <cstring>int dp[1010][2

2017-05-16 20:06:25 310

原创 Educational Codeforces Round 21 B. Average Sleep Time

树状数组求区间和,800多ms险过 就A俩水题,看人数第三个也是水题,没水过。第五个是01背包,应该没看错,但直接上背包在第十五个测试数据那超时了。。。。#include <iostream>#include <iomanip>using namespace std;typedef long long ll;const int MAXN = 2e5+10;int n,k;double

2017-05-16 01:46:45 236

原创 Educational Codeforces Round 21 A. Lucky Year

第二次做codeforces,终于找到在哪里看题解了,可是不知道在哪里看测试数据。。 第一题水题,随便搞搞就过了#include <cstdio>#include <cstring>typedef long long ll;int main(){ ll year; scanf("%I64d",&year); if(year < 10) printf("

2017-05-16 01:42:27 258

原创 51nod 1031 骨牌覆盖

斐波那契数列,递推 f[n]为2*n的方格公多少种排法。第n个单位处,要么是却一个竖着放的骨牌,要么就是n和n-1处都空着,却两个横着放的骨牌,所以f[n]=f[n-1]+f[n-2]#include <cstdio>#include <cstring>int f[1010];const int mod = 1e9+7;int main(){ int n; f[1] = 1;

2017-05-15 19:50:43 205

原创 51nod 1201 整数划分(dp)

看到这个题目首先想到了划分数,即把n划分成m个整数的加和(包括重复的数字,如3=1+1+1),然后确定数字n如果不重复,最多可以划分的位数,例如:1+2+3+4+5=15,则6<= n <10最多可以划分为3位,10 <= n < 15最多可以划分成4位。确定了最大划分的维数,剩下的就是去掉重复的数字了,然后就没有然后了。看了下讨论里,dp[i][j] = dp[i][j-i]+dp[i-1][j-

2017-05-15 18:47:53 387

原创 51nod 1084 矩阵取数问题 V2(dp)

起初我是先dp了一遍,然后去除选择过的点,然后再dp一遍。就过了四个测试数据。这样果然有问题,可以写个数据试一下,这样走出来的不是最大的结果。去看讨论,有一个评论里面说这个叫多进程dp,涨知识了。 我先写了个四维数组的,超时。。。#include <cstdio>#include <cstring>int G[100][100];int dp[50][50][50][50];int n,

2017-05-15 16:01:02 327

原创 51nod 1202 子序列个数(基础dp)

我本来定义的dp数组是dp[i][j],表示长度为i以第j个字符结尾的子序列的个数,然后就没然后了。我百度了下,看到人家说了个找规律。我就开始找起来规律了,画了几下,就找到规律了,如果不包含重复字符,dp[i]=dp[i-1]*2+1。。然后剩下的就是去重了。找完规律就有思路了。 具体思路: dp[i]表示以0~i这个子串所包含的子序列的个数 假设没有重复字符,当前添加进一个重复的第i+1个字

2017-05-14 23:40:57 281

原创 51nod 1042 数字0-9的数量(数位dp)

做法同51nod 1009 数字1的数量 相差不多,不过查询0的时候要特别处理,做的时候拿别人代码调了好久才看懂。。。参考的:http://blog.csdn.net/f_zyj/article/details/52082449#include <iostream>#include <algorithm>using namespace std;typedef long long ll;ll

2017-05-14 19:46:51 287

原创 Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) B. T-shirt buying

直接stl水过。用set。做完第一个题用了一个半小时多,第二个题用了十几分钟,然后两个小时基本就没了,也没再看后边的题目。#include <iostream>#include <algorithm>#include <set>using namespace std;const int MAXN = 200010;int num[MAXN];set<int> sets[4];int mai

2017-05-14 00:27:43 315

原创 Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) A. Carrot Cakes

前两天做的,第一次去codeforces做题。光这个第一个题就做了一个半小时,而且还代码写得老长,心累啊,我看别人的代码都写的很简短。 我的思路:如果在第一个烤箱烤好k个蛋糕之前就能制造出第二个烤箱,也就是t > d,我就把第二个烤箱推迟t-d的时间,然后和第一个烤箱一块烤。这时候两个烤箱就相当于合体了。当最后一次烤的蛋糕大于k个的时候,则现在一共用的时间就是用的最少时间。如果最后一次烤的蛋糕小于

2017-05-14 00:24:41 338

原创 第八届山东省acm省赛总结

打了个酱油,还是挺难过的,还好早就习惯了这种心态了,也打击不了我。先说下滚榜,滚榜的时候还是挺激动的,毕竟封榜的时候就在榜单末尾了,随时都可能从榜上滚下来,结果也是意料之中的滚下来了。比赛开始首先A掉I题,G题因为我在做I题的时候把提示的修改题目的信息关掉了,导致不知道题目修改数据了,wa了好几发,幸好tzc在pc2各页面乱翻的时候找到了修改题目的提示,不然恐怕要wa到比赛结束了。A完这两...

2017-05-13 21:48:31 867

原创 51nod 1009 数字1的数量(数位dp)

基础的数位dp,反正我不大会。 数位dp的ppt:https://wenku.baidu.com/view/9de41d51168884868662d623.html 建议先看一下ppt,我是按照ppt里面差不多的方式写的,也参考了别人写的。dp[i][j]表示长度为i位以j开头的数字到1(闭区间)之间包含多少1#include <cstdio>#include <cstring>#incl

2017-05-13 17:50:28 463

原创 51nod 1086 背包问题 V2

多重背包,看看背包九讲里面对多重背包的讲解。将多重背包的每种物品划分成若干物品,转化成01背包。划分要用到二进制的思想。 代码参考:http://blog.csdn.net/jkay_wong/article/details/7240588#include <cstdio>#include <cstring>#include <algorithm>using namespace std;t

2017-05-13 11:21:16 249

原创 51nod 1118 机器人走方格 & 1119 机器人走方格 V2(排列组合)

机器人每次只能向右走或者向下走。假设机器人在一个5*5的格子内部,机器人在格子内移动,每次只能走一格子,从左上走到右下,这样机器人会向右移动4次,向下移动4次,这就是4个向右移动和4个向下移动的排列组合,一共移动了8次,移动的方案数就是C(8,4)。由于求组合数的时候数字太大,而且也要取模,所以求组合数取模的时候要用乘法逆元#include <iostream>#include <algorith

2017-05-12 13:46:11 684

原创 51nod 1284 2 3 5 7的倍数(容斥原理)

先求出2,3,5,7的倍数的个数,然后用n减掉就好了。。#include <iostream>#include <algorithm>using namespace std;typedef long long ll;ll gcd(ll a, ll b){ ll temp; while(b) { temp = a % b; a = b;

2017-05-11 18:59:52 346

原创 51nod 1270 数组的最大代价(基础dp)

每个Ai取1或者Bi,然后dp。。。。dp[i][0]表示前i个数字且第i个数字取1的最大代价,dp[i][1]表示前i个数字且第i个数字取Bi的最大代价。#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int MAXN = 50010;int num[MAXN];int d

2017-05-11 16:01:34 255

原创 51nod 1051 最大子矩阵和(基础dp)

变形的最大子段和,时间复杂度是O(n^3)。 把每一行看成一个元素,这就是一列了,求这一列的最大子段和,处理行的时候枚举这一行每一个子段的子段和,然后再在纵向上求最大子段和。#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>using namespace std;typedef long l

2017-05-11 15:00:00 288

原创 51nod 1021 石子归并(基础dp)

假设有n堆石子,要把石子有次序的两两合并,要求代价最小。假设1~n之间有一k,把石子分为1~k和k~n两部分,划分后的这两部分再继续这样划分,直到不能划分,然后就开始分别合并,求出合并后的最小代价,即cost[1~n]=min{cost[1~k]+cost[k+1~n] | 1<=k<=n },用记忆化搜索还是比较好写的。#include <cstdio>#include <cstring>#

2017-05-10 19:21:43 260

原创 51nod 1050 循环数组最大子段和(基础dp)

刚开始还以为把数组复制一份接在后边求最大子段和呢,结果wa。。。然后就想了想两重循环,看数据量这样肯定会超时。。就去看看讨论版,思路很简单,可是想不到啊。。。 摘自讨论版: 答案有两种形式1.正常的最大连续序列2.开始在尾,结束的首第一种正常求,第二种考虑答案的组成,开始的一段+到结尾的一段,那么中间为什么去掉呢,因为中间那段和为负数,只要求出负数最大的连续子序列去掉就行了max(ans1,su

2017-05-10 15:26:09 247

原创 51nod 1007 正整数分组(01背包)

题目分类是动态规划,初看题目我只想到了搜索。怕超时,没写。看了下讨论版,才知道是01背包。 摘自讨论版:TIPS: 和最大为10000,两组最小的差值应该逼进sum / 2,所以当确定了sum/2 即可对N[i] < sum / 2的进行dp。之后再计算差值即可#include <cstdio>#include <cstring>#include <algorithm>using names

2017-05-09 18:00:55 274

原创 51nod 1083 矩阵取数问题(基础dp)

先用记忆化搜索写的,然后用两重循环dp的 因为只能向右走或向下走,所以每个格子也只能从上边走过来或者从左边走过来,也即是dp[i][j]=max(dp[i-1][j],dp[i][j-1])+G[i][j];#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN =

2017-05-09 12:50:24 314

循环小数-康明昌

讲解循环小数的数学规律

2017-08-22

循环小数性质及证明

循环小数的性质及证明

2017-07-27

Java语言程序设计第八版补充材料

Java语言程序设计第八版补充材料

2017-07-18

Qt5实现拼图+自动寻路

Qt5实现的拼图,添加了一个自动寻路的功能

2017-03-31

根据哈夫曼编码写的数据压缩解压软件(java实现)

根绝哈夫曼编码写的数据压缩解压软件

2016-11-28

QStackedLayout实现多界面切换

用QStackedLayout实现多界面切换

2016-11-12

简单架设“FTP” 工具

简简单单架设属于自己的FTP空间,绿色无毒,占空间小,使用简单方便

2011-08-13

空空如也

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

TA关注的人

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