- 博客(33)
- 收藏
- 关注
原创 HDU-2955 Robberies 01背包 + 概率
题目链接#include #include #include #include#include #include #include #include using namespace std;const int maxn = 106;const int inf = 1<<30;typedef __int64 LL;int n,V;float P,dp[maxn*
2014-04-29 22:02:51 389
原创 HDU-1074 Doing Homework 状态压缩DP
#include #include #include #include#include #include #include #include using namespace std;const int maxn = 16;const int inf = 1<<30;typedef __int64 LL;int n;struct node{ string name;
2014-04-29 10:25:50 410
转载 状态压缩动态规划
引入 首先来说说“状态压缩动态规划”这个名称,顾名思义,状态压缩动态规划这个算法包括两个特点,第一是“状态压缩”,第二是“动态规划”。 状态压缩: 从状态压缩的特点来看,这个算法适用的题目符合以下的条件: 1.解法需要保存一定的状态数据(表示一种状态的一个数据值),每个状态数据通常情况下是可以通过2进制来表示的。这就要求状态数据的每个单元只有两种状态,比如说棋盘上的格子
2014-04-28 19:07:26 584
原创 HDU-1501 Zipper 简单DP
#include #include #include#include #include using namespace std;const int maxn = 215;const int inf = 1<<30;typedef __int64 LL;int len1,len2;bool dp[maxn][maxn];char str1[maxn],str2[maxn],st
2014-04-28 19:02:58 398
原创 hdu-1227 Fast Food DP
#include #include #include#include #include using namespace std;const int maxn = 205;const int inf = 1<<30;typedef __int64 LL;int n,m;int pos[maxn],dis[maxn][maxn],dp[35][maxn];//dp[i][j]代表前
2014-04-27 17:00:10 359
原创 HDU-1693 Eat the Trees 插头DP
题目链接#include #include #include#include #include using namespace std;const int maxn = 13;const int inf = 1<<30;typedef __int64 LL;int n,m;int map[maxn][maxn];LL dp[maxn][maxn][1<<13];
2014-04-25 11:53:16 407
原创 Uva-116 Unidirectional TSP DP
#include #include #include#include #include using namespace std;const int maxn = 105;const int inf = 1<<30;int n,m;int dp[maxn][maxn],Path[maxn][maxn];int Min( int a,int b,int c ){ a = a<b
2014-04-23 18:09:33 543
原创 Uva-10131 Is Bigger Smarter?
s#include #include #include#include #include using namespace std;const int maxn = 1005;const int inf = 1<<30;int dp[maxn],Path[maxn];struct node{ int id,w,s;}ele[maxn];bool cmp( node a
2014-04-23 10:15:24 393
原创 Uva-10130 SuperSale 01背包
#include #include #include#include #include using namespace std;const int maxn = 1005;const int inf = 1<<30;int n,m;int val[maxn],w[maxn];int dp[maxn];int ZeroOnePacc( int v ){ memset( dp
2014-04-21 18:49:58 397
原创 HDU-1907 John
全是1的时候,特判#include"stdio.h"int main(){ int temp,t,n,s,x,i; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=s=temp=0;i<n;i++) { scanf("%
2014-04-21 10:18:50 393
原创 博弈模板
首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0。对于一个给定的有向无环图,定义关于图的每个顶点的Sprague-Grundy函数g如下:g(x)=mex{ g(y) | y是x的后继 },这里的g(x)即sg[x]例如:取石子问题,
2014-04-21 10:08:50 431
原创 HDU-2147 kiki's game 简单博弈(*)
#include #include #include#include #include using namespace std;const int maxn = 150;const int inf = 1<<30;int n,m;int main(){ #ifndef ONLINE_JUDGE //freopen("data.txt","r",stdin);
2014-04-20 13:19:14 355
原创 HDU-1846 Brave Game 简单博弈 (*)
题目链接#include #include #include#include #include using namespace std;const int maxn = 100050;const int inf = 1<<30;int n,m;int main(){ #ifndef ONLINE_JUDGE //freopen("data.txt","
2014-04-19 15:28:15 410
原创 2-Sat
#include #include #include#include #include using namespace std;const int maxn = 100050;const int inf = 1<<30;struct TwoSAT{ int n;; vectorG[maxn<<1]; bool mark[maxn]; int S[maxn<<1],c;
2014-04-19 15:07:36 340
原创 数位DP模板
找13int dp[maxn][3],digit[maxn];int dfs( int pos,int st,bool flag ){ if( !pos ) return st == 2; if( flag && dp[pos][st] != -1 ) return dp[pos][st]; int ans = 0; int u = flag?9:digit[pos]; for(
2014-04-16 12:00:46 567
原创 HDU-3652 B-number 数位DP
#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn = 20; typedef __int64 Int64;int n;int dp[maxn][maxn][3];int digit[maxn];int df
2014-04-16 11:51:04 389
原创 HDU-2089 不要62 数位DP 模板题
#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn = 15; int n,m;int dp[maxn][3],digit[maxn];int dfs( int pos,int st,bool flag ){
2014-04-15 22:54:17 514
原创 HDU-3555 Bomb 数位DP
题目链接#include #include #include #include #include using namespace std;const int maxn = 25;typedef unsigned __int64 Int64;Int64 N, dp[maxn][3];int digit[maxn];/*dp[len][0] 表示前len位没有49
2014-04-15 17:27:01 359
原创 Ustc-1280 Finding shortest path 网络流
#include #include #include#include #include using namespace std;const int maxn = 2005;const int inf = 1<<30;int n,m,pos,Pos;int Start,End;struct node{ int to,w,c,next;}edge[maxn*20];stru
2014-04-14 21:50:08 434
原创 POJ-1703 Find them, Catch them 经典并查集
#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn = 100005;const int inf = 1<<29;int n,m;int p[maxn],g[maxn]; //g 0表示相同 1表示不同in
2014-04-13 16:11:17 411
原创 Uva-10069 Distinct Subsequences DP
#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn = 155;const int inf = 1<<29;const int mod = 100000000;int n;char Str[maxn*maxn
2014-04-10 22:59:58 387
原创 POJ-Rebuilding Roads 树形DP
#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn = 155;const int inf = 1<<29;typedef __int64 LL;int n,p;int dp[maxn][maxn]; //d
2014-04-09 21:21:33 402
原创 POJ-2288 Islands and Bridges 状态压缩DP TSP
#include #include const int maxn = 13;typedef __int64 LL;int n,m,S;bool map[maxn][maxn];int v[maxn];LL dp[maxn][maxn][1<<13],way[maxn][maxn][1<<13];void GetDp(){ memset( dp,-1,sizeof(dp) );
2014-04-07 19:47:33 517
原创 POJ-2411 Mondriaan's Dream 状态压缩DP
题目#include #include int n,m;__int64 dp[12][1<<12],tmp;void dfs(int p,int s,int pos){ if( pos == m ){ dp[p][s] += tmp; return; } dfs( p,s,pos+1 ); if(( pos <= m-2 ) && !(s&(1<<po
2014-04-07 16:37:01 372
原创 POJ-1141 Brackets Sequence 经典区间DP
题目链接状态转移方程: dp[i][j] = min( dp[i][j], dp[i+1][j-1] ); //( str[i] == '(' && str[j] == ')' ) || ( str[i] == '[' && str[j] == ']' ) dp[i][j] = min( dp[i][j],
2014-04-03 21:01:18 407
原创 Uva-825 Walking on the Safe Side 水DP
题目链接简单DP就输入比较麻烦点 #include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn = 1030;const int inf = 1<<30;int n,m;int dp[maxn][maxn],vis
2014-04-03 18:19:27 422
原创 Uva-111 History Grading 裸最长公共子序列
题目链接#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn = 30;const int inf = 1<<30;int n;int str1[maxn],str2[maxn],dp[maxn][ma
2014-04-02 22:58:22 449
原创 KMP
#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn = 1005;const int inf = 1<<30;//0x7f;typedef __int64 LL;int ans;int Next[maxn];
2014-04-02 20:11:41 363
原创 FAFU-1398 面积 矩形面积并 线段树+扫描线
题目链接HDU1255加强版#include "stdio.h"#include "algorithm"using namespace std;const int maxn = 2110;int n;double y[maxn];struct node{ double x,y1,y2; //x 边的位置 y边的区间大小 int f;
2014-04-02 19:15:41 414
原创 POJ-2528 Mayor's posters 线段树+离散
题目链接题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报思路:这题数据范围很大,直接搞超时+超内存,需要离散化:离散化简单的来说就是只取我们需要的值来用,比如说区间[1000,2000],[1990,2012] 我们用不到[-∞,999][1001,1989][1991,1999][2001,2011][2013,+∞]这些值,所以我只需要1000,1990,2000,20
2014-04-01 14:29:52 395
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人