- 博客(66)
- 收藏
- 关注
原创 动态规划+之基础递推+noj三角形
#include#include#includeusing namespace std;int b[105][105],a[105][105];int main(){ int n,i,j; while(~scanf("%d",&n)) { memset(b,0,sizeof(b)); memset(a,0,sizeof(a)); for(i=
2013-04-16 20:09:00
505
原创 广搜--(搜索的第一道题)图像有用区域
点这里点击打开链接今天开始迈出了学习广搜的第一步,因为之前感觉搜索很难理解都没有固定的模式,但是觉得现在又到了不得不面对的时刻。一开始想用递归写的,就是想在外围加上1,然后就遍历一下如果不是0的就让它的递归它的四周,看看是否不是0;最后看了一下别人的思路,就换成了队列来写#include#include#include#include#includeusing namespace
2013-04-05 21:01:34
650
原创 每日阅读(产品) 汤道QQ与微信
SNG是腾讯体量最大、内部势力也最大的一个事业群,其覆盖了QQ、手机QQ、腾讯开放平台、腾讯云平台、广点通、移动分发平台应用宝在内的多条业务线。
2014-05-13 20:36:13
973
原创 2014/2/24
终于找回我的博客账号了,不想发说说,不想发微博,但是好像心里都有好多想说说的不说心里超级不舒服,和人说顾虑太多,还是自己写下来发泄一下吧。 四级居然没过,好吧我真的有被打击到了,组队的队友都过了,略显无力,但是心里还是有无数的声音在和我说着,事实就在眼前你要借鉴过去,把握今天的吧,心里老想着别人乃至学弟学妹看到我没过心里会不会超级鄙视的,心里总觉得居然现在还没过四级,原来总是自己害死自己,
2014-02-24 08:11:03
554
原创 4632
这是一道区间dp的题目;题意:就是给你一个字符串,让你找出回文子序列(可以不连续)的总数。之前在Noj上的一道 【回文字符串】也可以用这种方法。如果str[i]=str[j] dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1]+1; else dp[i][j]=dp[i+1][j]+dp[i][j-1];dp[i][j]代表的是从
2013-08-03 17:06:37
1732
原创 2013 多校联合4 1011 Fliping game (hdu 4642)
题意:在一个矩阵中放着可上可下的银币,你可以翻一个矩形里面的银币使它们变成相反的方向,但此矩型必须是右下角是矩阵的最右下角,左上角这个点必须是朝上的。最 后结束的标志是所有的银币都已经都是朝上的,此时游戏结束。思路:首先游戏是会结束的。假设最右下角的是1(其他都是0)那显然第一个人赢了。假设其他还有1那么第一个人最优的是把右下角的这一枚银币组成的矩形,这样使得它变成0。另一个人只能翻外面的1,
2013-08-02 09:59:56
592
原创 Hu 4639 hehe
一开始已经看不下去了,一直一直不懂,对着这道呵呵的题只能说呵呵了。 思路:后面小d讲的思路,一开始递推发现好像是斐波那契数列每一个,每一串中的每一个hehe你可以选择变还是不变,当你变了就是相当是一个i-1;的子串当你没变的时候就 是 一个i-2; 状态方程写下来dp[i]=dp[i-1]+dp[i-2];而当你把所有的情况都乘起来的时候就是结果了。因为长度是10086,he两个字符s
2013-08-01 19:23:57
606
原创 NOJ 20 吝啬的国度
开始做深搜的题,这是一种比较常见的递归,就是直接看去的点是从那来的,标记一下避免重复搜。深搜的注意个人认为,1,要在一定范围内一般是在递归在1e4的范围内; 2,就是要注意标记,不然也可能导致超时的;3,就是不要递归混乱了,最后就是=-=用数组存放好。尽量思路要清楚。#include #include #include #include using namespa
2013-07-26 09:52:54
540
原创 NOj 720项目安排
一开始有的唯一思路就是dp[i]是表示i这个项目所给出所有不冲突的和的比较,但是没有想到怎么实现,然后受到飘逸一个劲的折磨之后,思路终于变的很清楚了。思路:dp[i]代表的是第i个项目得到的最大价值,然后转移方程就是dp[i]=max{dp[i-1],dp[j]+value[i]);这个最大价值可以是前i-1的最大价值,或者是第i个项目和前面所有不冲突的项目之和(dp[j])+本身的价值,两者
2013-07-24 11:03:21
518
原创 字符串处理Keep Deleting
Assume that string A is the substring of string B if and only if we can find A in B, now we have a string A and another string B, your task is to find a A in B from B's left side to B's right side, an
2013-07-23 18:23:56
526
原创 NOJ --138 找球号(二)
最基础的哈希表用法,先看所要存的个数,一般都是10N+10的内存,这样相当于十个位置里面有一个,空间是足够的。之前一直一直都是超时,就是因为内存开小的话就会出现死循环,因为存不了那么多个数 #include#include #include using namespace std;const int base =10000010;int h[base];voi
2013-07-23 10:10:01
557
原创 Noj-589 --糖果
其实就是相当于所有给出种类最多的糖果类型里面个数最多的哪一类是一组,然后剩下的所有的糖果可以算是另一种,如果能错开的话就“Yes”,不能的话就不能。 另一种说法就是让所有种类的糖果从小到大的排序,然后看最多的,和第二多的差值是不是大于一,大于就不能,反之可以。#include #include #include using namespace std;int main(
2013-07-17 16:03:05
439
原创 模拟noj——打扑克
看到这个题一开始是想到有栈来做的,或者是直接看#include #include #include #include #include #include #include using namespace std;int a[10099],pos[10099];int main(){ //freopen("1.txt","r",stdin);
2013-07-17 15:36:10
501
原创 吃土豆
#include #include #include #include #include using namespace std;int dp[510],save[510][510],m,n;int main(){ while(~scanf("%d%d", &n,&m)) { memset(dp, 0, sizeof(dp));
2013-07-10 10:35:00
443
原创 记忆化搜素,和递推法
记忆化搜素是动态规划的改进,------自上而下,就是在递归重叠子问题时候,对子问题的重复问题的对策,就是一开始对所有子问题进行赋值(一般为-1)这样的标记方法来区分是否被查找过。 递推----也是动态规划的一种从底而上的方法。
2013-07-08 15:57:44
535
原创 别人整理的dp大全
动态规划动态规划 容易: , 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740, 1742, 1887, 1926, 1936, 1952, 1953, 1958, 1959,
2013-05-07 17:23:28
790
原创 分组背包基础--1712 ACboy needs your help
有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选。也就是说设f[k][v]表示前k组物品花费费用v能取得的最大权值,则有: f[k][v]=ma
2013-05-04 09:45:52
448
原创 大数相乘(大数阶乘模板)
#include#includeconst int max=40000;int f[max], n;int i,j, c,s;void find (){ memset(f,0,sizeof(f)); f[0]=1; for(i=2;i<=n;i++) { int c=0; for(j=0;j<max;j++)//开的数组比5000
2013-05-03 19:23:14
657
原创 两个大数(整数)相加模板
#include#includechar str[1005],ch[1005];int sum[1005],L;void fun(){ memset(sum,0,sizeof(sum)); int i,l,l1,t; l=strlen(str); for(i=l-1;i>=0;i--) //一个个数放进去; sum[
2013-05-03 18:59:43
511
原创 HU 3496 Watch The Movie---二维费用
点击打开链接这题是一道二维费用背包问题,刚开始的时候我把所有的都初始化为-1,只有ans[0][0]=0,这样是不对的,为什么呢。。。如果要恰好用完的话,是要将别的都初始化为-1。但是这个恰好是指的物品的件数恰好,那么就是说二维的费用中有一个费用是恰好,所以初始化-1的时候只要是对有这个要求的这一维进行初始化就可以了。#include #include #include
2013-05-03 17:22:51
524
原创 二维费用 hdu 2159 FATE(完全背包)HDU OJ 4501 小明系列故事——买年货【DP】
二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。算法费用加了一维,只需状态也加一维即可。设f[i][v][
2013-05-03 15:40:58
698
原创 二维费用 买糖果
Description清明君、五一君和六一君三个人是好朋友。他们很喜欢去一家糖果店买糖果,糖果店有巧克力和草莓两种口味的糖果出售。清明君喜欢吃巧克力味的糖果,六一君喜欢吃草莓味的糖果,五一君是个吃货,两种口味的糖果他都很喜欢吃。店老板把两种口味的糖果混在一起装在罐子里,于是每个罐子里每种糖果的数量都可能不相同。这一天,清明君、五一君和六一君三个人去买糖果。他们的钱只能购买m罐糖果。
2013-05-03 15:35:26
595
原创 循环节模板 NOJ427Number Sequence
点击打开链接#include #include #include #include using namespace std;int ye[7][7]; //可能出现的情况,用来存出现值得位置。int circle , from;int a ,b, n, f[52]={0,1,1};void find(int a, int b){ memset(ye,
2013-05-01 17:35:29
502
原创 矩阵模板之一
一个大数的k次方 斐波那契数#include #include #include using namespace std;struct app{ int p[30][30];};app mult(app a, app b){ app c; int i , j, k; for( i =0; i<2; i++)
2013-05-01 14:34:10
500
原创 NOJI 148 fibonacci数列(二) 矩阵乘法二分幂
第一次这样写以为不对的,自己撮合的着写的没想到对了,太激动了~。~点击打开链接#include #include #include using namespace std;struct app{ int p[30][30];};app mult(app a, app b){ app c; int i , j, k; f
2013-05-01 14:24:30
495
原创 矩阵相乘入门,两个矩阵相乘
•矩阵:矩阵可以看成一个n×m的数表,用二维数组表示•矩阵乘法:定义矩阵A,B。A和B可以乘法操作当且仅当A的大小是a×b,B的大小是b×c,设矩阵C=AB,则C的大小是a×c,且有 最普通的矩阵乘法是直接三个for循环直接计算而已,所以复杂度是O(n3)#includeusing namespace std;int main(){int i,j,k;cons
2013-05-01 10:52:31
3212
原创 还是树形dp 也可以用最短路来写--NOJ679 贪婪的商店
其实也是简单的dp,还可以把价格看成是权值用最短路来写,求出所要买的商品到各点的商品用最短距离;这个和376其实是一样的思路就是用深搜的。点击打开链接#include #include #include #include #include using namespace std;int dp[1005],flag[1005],cost[1005];vecto
2013-04-29 16:48:16
521
原创 简单的树形dp NOJ376 小强的Linux
树形dp是建立的树的基础上的有二叉和三叉等等树,现在学到的知识很简单的树形dp,但还是要注意深搜时要标记避免已经搜素得到过的结果可以直接用了不用在浪费时间去搜素了。还有就是对根节点的处理。点击打开链接#include #include #include #include #include using namespace std;int dp[1005],flag[1
2013-04-29 16:26:16
502
原创 二分枚举 +贪心 NOJ 680 摘枇杷
其实就是一到和疯牛一样思路的题目。每次分下了满足要求的每个组的最大值得最小值就是所以数中的最大值,最大值的最大值就是所有的数的和,此时是装在一个袋子里面的。如果是枚举的也可以因为数据太水还是可以过的,但是可以用二分,但是每次二分返回的就是你要符合条件的值,还有要注意的是,while(left《=right)是和right=mid-1;left=mid+1,而while(left点击
2013-04-29 15:58:04
607
原创 map的用法-HD 1029Ignatius and the Princess IV
这道题要注意的就是要所以的数不一定都是正数。用简单的dp来写如果你想用数组来存也可以,但是要把所有的数分成大于零和小于零两个数组,然后再dp。但是我发现可以哦用一种map来它可以存字符为下表,当然也能用负数。点击打开链接#include #include #include using namespace std;int main(){ int n;
2013-04-29 15:19:07
476
原创 把十进制的n转化成r进制的数的模板
void ttor(int n, int r){ if (n) { ttor(n / r, r); printf("%c", n % r > 9 ? n % r - 10 + 'A' : n % r + '0'); }}
2013-04-26 10:28:46
839
原创 注意区分啊~这里求的的事公共子串不是子序列。NOJ308-Substring
求公共子序列的思路: 假设A 串;B串,当第一个字符相等时就等于lena-1,lenb-1 的公共子序列的个数加一,当不相同的时候就是等于max(lena-1和lenb的公共,lena和lenb-1的公共)所以就可以等到一个状态转移方程式。而求公共子串的时候只要变一下就可以了。而下面就是求公共子串的。可以意会一下。点击打开链接 #include #include
2013-04-26 09:31:11
666
原创 NOJ37 回文字符串---整理一下都是各种回文类型啊,
点击打开链接注意要是求的字符串和逆串的公共子序列,和公共子串分开了哦。思路分析:1.判断字符串前后俩个字符是否相同,如果相同,则删去这俩字符,判断剩余的字符,不需要添加字符。2.如果不相同,则添加最少的字符的数量 = min((在字符串前添加和末尾一样的字符,删除末尾字符,判断其余字符串),(在字符串后添加和前边一样的字符,删除前边的字符, 判断其余字符串) ) + 1 ;很容
2013-04-25 21:06:16
584
原创 回文字符串啊~---太搞了 少年 DXH
点击打开链接j几天比赛了刚好出现了回文字符串,记得不要喝公共自序列区分啊,回文就是从前到后看是一样的,从后往前看也是一样的,这道题的思路就是先找出本串中自有的回文串,然后再加上不是回文的剩下的子串。代码如下,好好研究吧,自个好好研究吧~O(∩_∩)O哈! #include# includeint main(){ char a[50]; int
2013-04-25 20:29:24
566
原创 序号互换
#include #include int main(){ char str[10010],s[10010]; int t, i, len; scanf("%d", &t); while(t--) { memset(str, 0, sizeof(str)); scanf("%s", str);
2013-04-24 18:30:46
424
原创 sscanf 的应用noj——663弟弟的作业
点击打开链接在ssprintf(s,"%d",d);是把整型转化成字符串;#includeint main(){ char s[99]; int a, b, c, n = 0; while(scanf("%s", &s) == 1) //这里的1是代表是否有一个字符串出现 { if(sscanf(s, "%d+%d=%d", &a,
2013-04-24 08:55:40
539
原创 strstr的应用---Hd 2054 A == B ?
点击打开链接主要还是怕小数后面有零存在然后导致错误出现;所以就只要把小数处理好就可以了。#include #include char str[1000005],s[100005];void find(char s[]){ int i,len; len = strlen(s); if(strstr(s,".")) //在这个字符串中如果
2013-04-24 08:43:47
564
原创 HD Piggy-Bank完全背包
#include #include #define min(a,b) a<b? a:bint dp[1000005];int main(){ int t; scanf("%d",&t); while(t--) { memset(dp, 99898,sizeof(dp)); //注意初始化数组这里 dp
2013-04-22 20:34:36
410
原创 HDU OJ 2830 Matrix Swapping II 【动态规划】
#include #include #include using namespace std;bool cmp( int x, int y){ return x>y;}int main(){ int n, m, sum[1005], dp[1005]; while(~scanf("%d%d", &n, &m)) {
2013-04-19 18:18:27
413
原创 noj +422字串和之差
#include #include #include using namespace std;int dp[1000005], sum[1000005];int main(){ int t, n,a, b; scanf("%d", &t); while(t--) { memset(dp, 0, sizeof(dp))
2013-04-19 16:44:21
415
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅