基本DP
phantompiupiupiu
这个作者很懒,什么都没留下…
展开
-
POJ 1112 WA到死
一路WA到死啊。这个题本身就比较有难度了,完全是给跪了,整体先是求补图,然后做二分染色,之后通过DP来求的最佳的分组状况。看下POJ 上的分析,和一些网上的代码才能明白过来,特别是二分染色 是第一次遇到啊,这个dfs的写法还是比较恶心的。这里的DP也是非常的难想成做可能不可能的这种01的DP值。首先,我们分析一下分组的要求:1、把所有的人分成2组,每组至少有1人;2、每组之间的人两原创 2016-10-06 10:32:28 · 714 阅读 · 0 评论 -
HDU 1087
#include#include#includeusing namespace std;const int maxn=1005;int n;int a[maxn],b[maxn];int main(){ while(scanf("%d",&n)!=EOF) { if(n==0) break; memset(b,0,si原创 2016-04-08 19:41:23 · 167 阅读 · 0 评论 -
HDU 1074
#include#include#includeusing namespace std;const int maxn=1<<16;int n,t;typedef struct name{ char a[maxn]; int d,c;}homework;typedef struct we{ int time;//该状态的时间 int pre;转载 2016-04-09 21:23:58 · 173 阅读 · 0 评论 -
HDU 1114
#include#include#includeusing namespace std;const int maxn=100000;int t,e,g,n;int p[505],w[505];int f[maxn];int main(){ scanf("%d",&t); while(t--) { scanf("%d%d",&e,原创 2016-04-14 19:48:45 · 410 阅读 · 2 评论 -
HDU 2859
#include#include#includeusing namespace std;const int maxn=1005;int n,m;char a[maxn][maxn];int dp[maxn][maxn];int main(){ while(scanf("%d",&n)!=EOF&&n!=0) { m=1;//换成0的话就会wa,因原创 2016-04-17 23:29:06 · 168 阅读 · 0 评论 -
POJ 3616
#include#include#includeusing namespace std;int n,m,r;typedef struct name{ int sta,en,eff;}milk;milk a[1005];int dp[1005];bool cmp(milk a,milk b){ if(a.sta<b.sta) return原创 2016-04-18 20:01:00 · 206 阅读 · 0 评论 -
HDU 1078
#include#include#includeusing namespace std;const int maxn=1000;int n,k;int a[maxn][maxn],dp[maxn][maxn];int step[4][2]={1,0,-1,0,0,1,0,-1};int dfs(int x,int y){ int i,j,ans=0;//ans是每一个转载 2016-04-18 21:42:55 · 180 阅读 · 0 评论 -
POJ 1661
#include#include#includeusing namespace std;const int maxn=1010;int t,n,s1,s2,maxs;typedef struct name{ int x1,x2,h;}jimmy;jimmy a[maxn];int dp[maxn][2];const int INF=9999999;转载 2016-04-22 21:50:25 · 611 阅读 · 0 评论 -
POJ 1015
#include#include#include#includeusing namespace std;const int maxn=1000;int n,m;int p[maxn],d[maxn],cha[maxn],he[maxn];int dp[maxn][maxn];int path[maxn][maxn],id[maxn];bool select(int j,转载 2016-04-25 20:50:59 · 177 阅读 · 0 评论 -
NEU 1052
#include#include#includeusing namespace std;int n,m,maxs,r,d;int x[44],temp[44],dp[44][440];int DP(int d){ int res; int f=0; for(int i=0;i<440;i++) { if(temp[d]>i)dp原创 2016-05-13 12:32:43 · 203 阅读 · 0 评论 -
HDU 1864
#include#include#includeusing namespace std;const int maxn=100;int n;double q;int dp[3000050];int f[maxn];double maxsum; int m; char a; double b;int main(){ int ff=1; w原创 2016-05-18 21:42:36 · 282 阅读 · 0 评论 -
HDU 1024
#include#include#includeusing namespace std;#define INF 100000000const int maxn=1000005;int m,n;int maxsum;int a[maxn],dp[maxn],pre[maxn];int main(){ while(scanf("%d%d",&m,&n)!=EOF)转载 2016-04-05 23:04:41 · 167 阅读 · 0 评论 -
HDU 1069
#include#include#includeusing namespace std;const int maxn=1000;typedef struct name{ int a,b,c;}cube;int n,d[3];int dp[maxn];cube maze[maxn];int cmp(cube x,cube y){ if(x.a>y.a)转载 2016-04-05 20:23:26 · 152 阅读 · 0 评论 -
HDU 1176
/*HDU 1176#include#include#includeusing namespace std;const int maxn=10000;int dp[15][100005];int n,x,t,a[15][100005];int main(){ int maxt; while(scanf("%d",&n)!=EOF) {原创 2016-04-04 20:57:15 · 155 阅读 · 0 评论 -
POJ 1015
一个比较有新意的DP,也是感觉比较值得学习的DP,这种DP的题目就是看着不像一般做的背包之类的,而实际上又是相差不多,特别是对于状态参数的定位和循环的写法,这是很值得学习的。本题首先分析数值范围的时候,就应该想得到的就是把这个把这个数组开成800+,然后数据进行移位m*20,之后的就是循环求最值和路径的求解了。引用:问题的关键是建立递推关系。需要从哪些已知条件出发,才能求出f(j,原创 2016-10-05 19:51:29 · 245 阅读 · 0 评论 -
HDU 1864
来个DP练练手,这个题就是个01背包没什么难度的,稍微考验码力的就是字符串的处理读取数据的时候了,然后就是超内存了一次,只需要分析判断好内存最大开多少就好了。因为最多是30张发票,每张面额不超过1000,因此是30000,后来在01背包过程时数据被扩大100倍,因此最后是3000050#include#include#includeusing namespace std;int原创 2016-09-28 20:44:55 · 271 阅读 · 0 评论 -
HDU 2955
又开始练DP了,= =!,没办法 ,新组的队友也是DP弱鸡,只能开始练习了。此题看完后就是一个01背包,一开始想到是如果把背包容量当成概率,然后能抢到的前当成价值,然后一开始就把概率乘以1000000后化成int,再进行01背包,其实这一开始就是错误的了,这个题的概率当抢了两个以上的银行的时候不应该是常见的01背包的那种累加的情况,而应该是累成的情况。这点需要注意下。还有就是价值应该换成不被抓原创 2016-09-14 21:44:28 · 255 阅读 · 0 评论 -
POJ 3279
#include#includeusing namespace std;const int maxn=30;int a[maxn][maxn],b[maxn][maxn],ans[maxn][maxn];int m,n,f;int check(int k){ for(int i=0;i<n;i++) { if(k&(1<<i))转载 2016-03-07 19:19:11 · 266 阅读 · 0 评论 -
HDU 1029
#include#includeusing namespace std;const int maxn=999999;int n,a[maxn],b[maxn],c[maxn],d[maxn],vis[maxn],s[maxn];int main(){ int k=0; while(scanf("%d",&n)==1) { k=0;原创 2016-03-08 14:32:34 · 212 阅读 · 0 评论 -
HDU 1257
#includeconst int maxn=100000;int n,kase,temp,a[maxn];int main(){ while(scanf("%d",&n)==1) { int j; kase=0; for(int i=0;i<n;i++) { scanf("%d",&转载 2016-03-08 15:48:13 · 234 阅读 · 0 评论 -
HDU 1160
#include#include#include#include#includeusing namespace std;const int maxn=1005;typedef struct name{ int w; int s; int tag;}mice;mice a[maxn];int k,i,f,kase,b[maxn],pre[maxn],m原创 2016-03-08 22:33:25 · 462 阅读 · 0 评论 -
POJ 2533
#includeconst int maxn=1000;int n,a[maxn],b[maxn],maxs;int main(){ int j,k; while(scanf("%d",&n)==1) { for(int i=0;i<n;i++) { scanf("%d",&a[i]); }原创 2016-03-09 21:50:23 · 156 阅读 · 0 评论 -
POJ 3186
#include#includeusing namespace std;const int maxn=3000;int n,d[maxn][maxn],a[maxn],maxs;int main(){ int i,j; while(scanf("%d",&n)==1) { for(int i=0;i<n;i++) sc原创 2016-03-11 19:35:25 · 168 阅读 · 0 评论 -
HDU 1260
#include#includeusing namespace std;const int maxn=10000;int n,num,a[maxn],b[maxn],d[maxn],q,w,e;int main(){ scanf("%d",&n); while(n--) { scanf("%d",&num); for(int i原创 2016-03-11 20:43:21 · 215 阅读 · 0 评论 -
UVa 1025
#include#include#includeusing namespace std;const int maxn=500;const int INF=0x3f3f3f3f;int n,t;int a[maxn];int m1,m2;int d[maxn],e[maxn];int train[300][100][2];int dp[maxn][maxn];int m原创 2016-05-18 22:14:16 · 270 阅读 · 0 评论 -
HDU 1505
#include#include#includeusing namespace std;const int maxn=1010;int d[maxn][maxn];int l[maxn],r[maxn];int t,a,b;char c[2];int maxs;int main(){ scanf("%d",&t); while(t--) {转载 2016-05-21 20:43:59 · 255 阅读 · 0 评论 -
HDU 2571
#include#include#includeusing namespace std;const int maxn=1050;const int INF=-99999999;int t,n,m;int k;int x[maxn][maxn],dp[maxn][maxn];int main(){ scanf("%d",&t); while(t--)原创 2016-05-22 00:10:24 · 169 阅读 · 0 评论 -
UVa 12186
#include#include#include#includeusing namespace std;const int maxn=1000000;int n,t;int b[maxn];vector sons[maxn];int dp(int u){ if(sons[u].empty()) return 1; int k=sons[u].size();原创 2016-07-24 12:52:30 · 335 阅读 · 0 评论 -
UVa 1220
#include#include#include#include#include#include#includeusing namespace std;const int maxn=5000;int n;int d[maxn][2],f[maxn][2];//这种简单的二维机构,设计0代表当前u的结点不选入,而1代表当前的u的结点选入vector sons[maxn];原创 2016-07-25 16:17:22 · 375 阅读 · 0 评论 -
UVa 1218
#include#include#include#include#include#includeusing namespace std;const int maxn=100000;int n;vector sons[maxn];int a,b,c;int d[maxn][3];int vis[maxn];int dp(int u){ vis[u]=1;原创 2016-07-26 09:51:09 · 323 阅读 · 0 评论 -
UVa 10817 不会子集的二进制表示法
#include#include#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;const int maxn=125;const int maxs=8;int s,n,m,c[maxn],st[maxn],d[maxn][1<<maxs][1<<maxs];int转载 2016-07-26 15:06:05 · 164 阅读 · 0 评论 -
UVa 1252该类的子集的二进制表示方法还需要学习
#include#include#includeusing namespace std;const int maxn=150;const int maxs=11;const int INF=0x3f3f3f3f;int d[1<<maxs][1<<maxs];int cnt[1<<maxs][1<<maxs];int p[maxn],n,m;char t[maxs+3];转载 2016-07-26 17:08:03 · 169 阅读 · 0 评论 -
UVa 10285
#include#include#include#include#includeusing namespace std;const int maxn=300;int t,r,c;char a[maxn];int vis[maxn][maxn],m[maxn][maxn],step[maxn][maxn];//step代表当前结点能到达的最长的长度值//step用作存储记忆化原创 2016-07-27 10:10:25 · 215 阅读 · 0 评论 -
UVa 10285 BFS的做法
#include#include#include#include#includeusing namespace std;const int maxn=300;int t,r,c;char a[maxn];int vis[maxn][maxn],m[maxn][maxn];//step代表当前结点能到达的最长的长度值//step用作存储记忆化的功能,所以不需要再每次跑循环的时原创 2016-07-27 10:39:18 · 211 阅读 · 0 评论 -
UVa 10118DFS记忆化搜素
#include#include#includeusing namespace std;const int maxn=45;const int mm=5;int n;int a[maxn][5];int dp[maxn][maxn][maxn][maxn];int top[5];bool judge[25];int dfs(int count){ if(dp[top原创 2016-07-27 15:46:06 · 222 阅读 · 0 评论 -
UVa 1629
#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;const int maxn=500;struct name{ int x,y;}cherry[maxn];int n,m,k;int dp[25][25][25][25];//u,d,l,r代表的上下左右的界限,记住是线,就是边原创 2016-07-27 17:23:16 · 265 阅读 · 0 评论 -
UVa 1630 太难了惭愧啊。
#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;const int maxn=200;int n;string a;int d[maxn][maxn];string b[maxn][maxn];//折叠后的串的样子int judge(int l,int r){转载 2016-07-27 22:06:56 · 303 阅读 · 0 评论 -
UVa 1331
#include#include#include#includeusing namespace std;const double INF=0x3f3f3f3f;const int maxn=1000;const double esp=1e-6;int n,m;struct point{ double x;double y;}d[maxn];double dp[原创 2016-07-23 21:00:10 · 253 阅读 · 0 评论 -
UVa 1626
#include#include#includeusing namespace std;const int maxn=10000;int n;char a[maxn];int dp[maxn][maxn],s[maxn];int match(char a,char b){ if((a=='('&&b==')')||(a=='['&&b==']')) return 1;原创 2016-07-23 10:46:20 · 242 阅读 · 0 评论 -
UVa 10003
#include#include#includeusing namespace std;const int maxn=1050;const int INF=0x3f3f3f3f;int l,n;int a[maxn];int d[maxn][maxn];int main(){ while(scanf("%d",&l)!=EOF) { if(原创 2016-07-23 00:41:16 · 286 阅读 · 0 评论