
基础算法
苏子散人
爱古风,爱代码。
展开
-
kmp
#include#includeusing namespace std;#define MAX 1000001char s[MAX],p[MAX];int next1[MAX];bool f;void getnext(char p[]){ next1[0]=0; int j=0,k=0; for(int i=1;i<strlen(p);i++) { while(k>0&原创 2016-03-30 23:53:10 · 228 阅读 · 0 评论 -
codeforces711D Directed Rodes(dfs)
//每个顶点只有一个出度#include#include#include#includeusing namespace std;const int maxn=2e5+1;int mod=1e9+7;int cnt;int s[maxn];int vis[maxn],num[maxn];queue cycle;long long pow(long long a,long l原创 2016-09-11 00:44:46 · 277 阅读 · 0 评论 -
hdu5536(字典树的插入和删除)
#include #include#includeusing namespace std;typedef long long LL;const int N=35000;struct Trie{ LL ch[N][2],sz; int val[N],ed[N]; void Init(){ memset(ch[0],0,sizeof(ch[0])); sz=1;}原创 2016-07-25 14:28:13 · 730 阅读 · 0 评论 -
poj3061(尺取法)
#includeusing namespace std;const int maxn=1e5+10;#define inf 0xfffffffint a[maxn];long long sum[maxn];int main(){ int n,T,i; long long s; cin>>T; while(T--) { cin>>n>>s; sum[0]=0;原创 2016-07-24 13:27:15 · 267 阅读 · 0 评论 -
两只船的装载问题
#includeusing namespace std;int n,c1,c2,w[20],a[20];int maxw;void check(){ int i,weight=0; for(i=0;i<n;i++) { if(a[i]) weight+=w[i]; } if(weight<=c1) if(weight>maxw)原创 2016-06-14 16:17:34 · 1667 阅读 · 0 评论 -
八皇后问题
#include#includeusing namespace std;int vis_c[10],vis_r[10];int queen[10];int num;void dfs(int row,int col,int cnt){ if(cnt==8) { num++; return; } if(row>=7)return;//8行已经全部放好皇后 int i=原创 2016-06-14 13:22:07 · 297 阅读 · 0 评论 -
棋盘覆盖(递归的应用)
当k>0时,将2k×2k棋盘分割为4个2k-1×2k-1子棋盘(a)所示。特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘中无特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,可以用一个L型骨牌覆盖这3个较小棋盘的会合处,如(b)所示,从而将原问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种分割,直至棋盘简化为棋盘1×1。#includeusi翻译 2016-06-13 20:54:33 · 846 阅读 · 0 评论 -
poj1321
方法1#include#includeusing namespace std;int k,n;int viscol[8];char s[8][8];int num;void dfs(int row,int cnt)//row为当前行,cnt为已经放的棋子个数{ if(cnt==k) { num++; return; } if(row>=n)return;//翻译 2016-06-06 16:20:06 · 251 阅读 · 0 评论 -
poj3258 二分(连续区间求和)
#include#includeusing namespace std;#define maxn 50010long long a[maxn],L,b[maxn];int m,n;bool ok(long long x){ int flag=0,pre=0; long long sum=0; for(int j=1;j<=n+1;j++) {原创 2016-06-28 00:38:45 · 367 阅读 · 0 评论 -
poj3009DFS
#includeusing namespace std;int w,h,min1;int s[25][25],map[50];int to[4][2]={0,-1,0,1,-1,0,1,0};void dfs(int x,int y,int cnt){ int i,xx,yy; if(cnt>10) return; for(i=0;i<4;i++) { xx=x+to[i]原创 2016-06-06 00:09:44 · 258 阅读 · 0 评论 -
HDU1258
#include#includeusing namespace std;int s[15],map[15];int t,n,flag;int cmp(int a,int b){ return a>b;}void dfs(int i,int total,int k){ int j; if(total>t) return; if(total==t) { flag=1;原创 2016-06-05 12:13:49 · 411 阅读 · 0 评论 -
poj2785
二分法#include#include#includeusing namespace std;int s[4002][4],x[4000*4000],y[4000*4000];int bin(int key,int b[],int n);int main(){ int n,i,j; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<原创 2016-06-24 16:58:20 · 270 阅读 · 0 评论 -
kmp2
#include#include#include#define MAX 1000001using namespace std;char s[MAX],p[MAX];int next2[MAX];void getnext(char p[]){ int i=0,k=-1; next2[0]=-1; while(i<strlen(p)) { if(k==-1||p[i]==p转载 2016-03-31 13:44:31 · 390 阅读 · 0 评论 -
百练1603 floyd算法基础
#include<iostream>#include<cstring>using namespace std;#define INF 0x3f3f3f#define n 20const int N=25;int dist[N][N];void init(){ for(int i=0;i<=n;i++) for(int j=0...原创 2018-07-23 22:13:12 · 203 阅读 · 0 评论