自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 DP的见解

这个可以根据你的动归的状态划分阶段,所谓的阶段就是每个状态它由哪些状态转移过来时,这两者的差别,通过状态推导转移再划分阶段,这大概就是基本的动归思想吧,滚动数组其实就是为了优化动归的空间的,有些状态的解虽然由前面转移过来但是我们没有必要将其保存起来,因为我们只需要最终的答案,这样就可以优化,降低DP的空间复杂度,因为动归就是个用空间换时间的典型嘛,但是空间也是有限的。实际一点就是我们每次

2016-11-30 21:57:10 224

原创 滚动数组

01背包 有N元求取K件是的w[i]*v[i]和最大#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 30000 + 10;int n,m;int v[maxn];int p[maxn];int dp[maxn];///用dp[i]表示花费i元的最优解。void solve()

2016-11-30 21:31:11 259

转载 题意就是让我们找一个数只能有三个约数,很明显素数有两个,那么容易找到规律,这个数只能有着三个约数。1和自己还有sqrt(n)。sqrt(n)自然要是素数

题意就是让我们找一个数只能有三个约数,很明显素数有两个,那么容易找到规律,这个数只能有着三个约数。1和自己还有sqrt(n)。sqrt(n)自然要是素数。 #include<bits/stdc++.h>using namespace std;const int maxn=400;const int max1=100000+10;bool vis[maxn];int a[max1];in

2016-11-29 13:35:04 363

原创 01背包

01背包 有N元求取K件是的w[i]*v[i]和最大#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 1000 + 10;const int maxn1 = 30000 + 10;int n,m;int v[maxn];int p[maxn];int dp[30][maxn

2016-11-29 13:46:15 176

原创 三角形上的格点数

三角形上的格点数#include<iostream>#include<cstdio>#include<cmath>using namespace std;typedef long long LL;const int maxn = 10000 + 10;int a,b,c,d,e,f;///匹克定理 多边形的面积 = (多边形上的格点数) + 二分之一边界上的格点树 - 1///海伦公式

2016-11-29 13:45:49 1220

原创 全排列

全排列std::next_permutation提供升序、std::prev_permutation提供降序。void dfs(int step){ if(step==n) { for(int i = 0;i<n;i++) printf("%d ",s[i]); printf("\n"); }else { for(

2016-11-29 13:45:00 260

原创 可重集全排列

可重集的全排列int n;int a[maxn];int p[maxn];void dfs(int step){ if(step==n) { for(int i = 0;i<n;i++) { printf("%d ",a[i]); } printf("\n"); } else

2016-11-29 13:44:38 590

原创 全排列stl

STL的全排列支持可重集int n;int p[maxn];void solve(){ scanf("%d",&n); for(int i = 0;i<n;i++) { scanf("%d",&p[i]); } do { for(int i = 0;i<n;i++) printf("%d ",p[i]);

2016-11-29 13:44:05 261

原创 数组模拟队列

队列插入删除操作数组模拟#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 100000 + 10;int l[maxn];int r[maxn];///l[i]表示i的前驱,r[i]表示i的后继。int head = 0;void solve(){ int n;

2016-11-29 13:43:39 859

原创 优先队列stl

优先队列例题#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 100000 + 10;int n;int a[maxn];LL ans;void solve(){ // priority_queue<LL, vector<LL> , greater<LL> > a;///小

2016-11-29 13:43:02 176

原创 幻方

魔方矩阵的变形,输入一个奇数n,形成一个n*n的矩阵,使得矩阵的每一行,每一列,两个对角线都是奇数。#include <stdio.h> #include <stdlib.h> void CalculateOddMagicSquare(int n) { int matrix[50][50]; int nsqr = n * n; int i=0, j=n/2;

2016-11-29 13:42:17 550

原创 输出序列的约瑟夫环

输出序列约瑟夫环#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 100000 + 10;int n,m;struct node{ char a; int id; node(char _a=' ',int _id=0): a(_a),id(_id){}};i

2016-11-29 13:41:42 1098

原创 大模拟

多项式输出#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 1e5 + 10;int a[maxn];int flag;void solve(){ int n; scanf("%d",&n); n = n +1; for(int i = 1;i<=n

2016-11-29 13:41:04 899

原创 dfs

我们要求找出具有下列性质数的个数(包含输入的自然数n):先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:1.不作任何处理;2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;3.加上数后,继续按此规则进行处理,直到不能再加自然数为止.int step ;void dfs(int x){ for(int i =1;i<=x/2;i++)

2016-11-29 13:40:11 453

原创 dfs

已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为:3+7+12=223+7+19=297+12+19=383+12+19=34。现在,要求你计算出和为素数共有多少种。例如上例,只有一种的和为素数:3+7+19=29)。

2016-11-29 13:39:47 201

原创 枚举

给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:#include<bits/stdc++.h>using namespace std;typedef long long LL ;const int hc[10]={6,2,5,5,4,5,6,3,7,6};int n;int j

2016-11-29 13:39:15 240

原创 回文素数

因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)( 一亿)间的所有回文质数;#include<iostream>using namespace std;int hw(long long s){ int kd=s,n=1; while(kd)

2016-11-29 13:38:39 298

原创 bfs

有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 400 + 10;const int dx[] = {1,1,-1,-1,2,2,-2,-2};const int dy[

2016-11-29 13:37:55 204

原创 N的整数划分

将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的。1,1,5; 1,5,1; 5,1,1;问有多少种不同的分法。#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 200 + 10;int dp[maxn][maxn];

2016-11-29 13:36:55 1309

原创 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。

有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 100000 + 10;int dp[maxn];void solve(){ int n,k; scanf("

2016-11-29 13:36:24 4196

转载 统计一个数在计算机由几个1存储

统计一个数在计算机有有几个1存储#include<stdio.h>#include<iostream>using namespace std;int n;int main(){ int t; scanf("%d",&t); while(t--){ scanf("%d",&n); int res = 0; for (in

2016-11-29 13:33:40 263

转载 大数运算支持负数但是不支持大数除以大数

includeincludeincludeusing namespace std; const int maxn = 5000; class BigInt { private: int bit[5000]; bool negative;//负数标志public: BigInt(); //默认构造函数,值为0 BigInt(c

2016-11-29 13:32:08 394

空空如也

空空如也

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

TA关注的人

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