动态规划DP
文章平均质量分 54
NOTTME
这个作者很懒,什么都没留下…
展开
-
POJ1191(棋盘分割DP)
参照了黑书上的思路,先对方差进行化简,变为求矩阵的平方和最大,然后动态规划。用G++一直WA,改用C++就过了,百度了下发现G++输出double要用%f。#include #include #include #include #include #include using namespace std;int dp[17][9][9][9][9];int A[9][9];原创 2014-03-28 13:57:32 · 501 阅读 · 0 评论 -
URAL1928(博弈dp)
/* Created on: 2013-12-14 * Author: Miao */#include #include #include #include #include #include using namespace std;int main(){ int n,m,k; int dp[10005][2]={{0}}; int i,j; scan原创 2014-04-16 13:46:04 · 666 阅读 · 0 评论 -
POJ1143(博弈+记忆化搜索)
#include#include#include#include#include #include #include #include using namespace std;int dp[2000000];//int hash[]={0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096, //8192,16384,3原创 2014-04-23 10:53:18 · 735 阅读 · 0 评论 -
携程初赛1001
聪明的猴子Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0Problem Description森林中有一排香蕉树(无限长),一只猴子站在其中一棵树原创 2014-04-10 21:14:42 · 1242 阅读 · 0 评论 -
携程初赛1002
#include #include #include #include #include #include #include #include #include using namespace std;const int maxn=100000000;int main(){ int T; scanf("%d",&T); while (T--) { char原创 2014-04-11 17:52:55 · 2019 阅读 · 0 评论 -
POJ3311(状态压缩DP+Floyd)
不知道为什么min写成#define min(x,y) (原创 2014-05-30 20:57:36 · 942 阅读 · 0 评论 -
POJ1947(树状DP+背包问题)
/* * Cpp0.cpp * * Created on: 2014年7月8日 * Author: MIAO */#include #include #include #include using namespace std;vector V[155];int dp[155][155];int n,p;const int inf=0xffffff;vo原创 2014-07-09 16:56:18 · 490 阅读 · 0 评论 -
POJ1274(多重背包)
二进制拆分。原创 2014-07-11 13:26:18 · 476 阅读 · 0 评论 -
POJ3254(DP状态压缩)
/* * Cpp0.cpp * * Created on: 2014年7月8日 * Author: MIAO */#include #include #include #include #include using namespace std;int n,m;int A[13][13];bool valid(int row,int state){ in原创 2014-09-11 22:56:16 · 492 阅读 · 0 评论 -
Sicily1176
递归超时的代码:// Problem#: 1176// Submission#: 2918390// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License// URI: http://creativecommons.org/l原创 2014-09-17 15:46:35 · 799 阅读 · 0 评论 -
Sicily1121
dp[i][j]表示第i列第j种切口情况的原创 2014-10-18 20:32:09 · 1014 阅读 · 0 评论 -
Sicily1345(能量项链DP)
A[j][i]表示从j个珠子开始到j+i个珠子的能量最优值。(若j+i>=n-1则取余)比如对于样例数据(2,3)(3,5)(5,10)(10,2)。假定从0开始计,A[0][2]即(2,3)(3,5)(5,10)的最优值,可能先聚合(2,3)和(3,5),再(2,5)和(5,10)聚合,也可能(3,5)和(5,10)先聚合,再(2,3)和(3,10)聚合。用A表示则为A[0][2]等原创 2013-12-13 21:59:16 · 835 阅读 · 0 评论 -
POJ1179(石子合并类型DP)
最大值可能是由两个负的最小值相乘得到,所以还要维护最小值。最小值可能是由一个最大值(正数)乘一个最小值(负数)得到。#include #include #include #include using namespace std;int main(){ char s[2]; int n; int i,j,k; int e[105]; int dp[105][105],原创 2014-12-22 09:56:18 · 1170 阅读 · 0 评论 -
hdu1506
注意最后乘法会超int范围,转换为longlong。#include #include using namespace std;int A[100005];int l[100005];int r[100005];int main(){ int n,i; while (1) { scanf("%d",&n); if (!n) break; for (i=0;i原创 2015-02-16 23:02:35 · 452 阅读 · 0 评论 -
POJ1088(记忆化搜索)
#include #include #include #include #include #include #include using namespace std;const int maxx=1000000000;int A[105][105];int dp[105][105];int dirx[]={-1,0,1,0};int diry[]={0,1,0,-1};原创 2014-03-28 18:48:54 · 516 阅读 · 0 评论 -
HDU3555
代码转载自http://blog.csdn.net/winkloud/article/details/7866520看了好久才看懂举449为例,len=3,因为要考虑1-449,而下面的算法都是在以一种小于的关系而不是小于等于的关系存在,因此要写成450才会计算1-449,。所以n++是这么来的。①i=3,先统计400以下的(1-399),即0-99中有49的,再乘上num[i]即可,原创 2013-04-21 22:41:40 · 624 阅读 · 0 评论 -
HDU1078(记忆化搜索)
#include #include #include using namespace std;int n,k,dp[101][101],map[101][101];int dfs(int a,int b){ if(dp[a][b]) return dp[a][b]; dp[a][b] = map[a][b]; for(int i = 1;i<=k;i++){原创 2013-11-22 15:47:25 · 665 阅读 · 0 评论 -
Sicily10399(DP)
dp[i]表示从1到i所花费的最小值。当新添加元素i时,需要放置一个wifi点在它和i之前的点的中间,或直接设立在它的位置上,遍历一遍取最小的值。#include #include #include #include using namespace std;const int maxn=100000000;int main(){ int n,a,b; double dp原创 2014-03-12 12:43:03 · 541 阅读 · 0 评论 -
POJ1036(DP)
思路有点像最长不减子序列的一种O(n^2)的做法。dp[i]表示以第i个Gangster为结尾的能得到的prosperity的最大值。dp[i]=max(G[i].p,dp[j]+G[i].p)(0#include #include #include using namespace std;struct Gangster{ int t,p,s;};bool cmp(原创 2014-03-08 19:23:02 · 740 阅读 · 0 评论 -
Ural1577(DP)
F - E-mailTime Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uSubmit Status Practice URAL 1577DescriptionVasya started to use the Internet not so long a原创 2014-02-27 10:22:51 · 664 阅读 · 0 评论 -
Ural1017(DP)
转自:http://www.cnblogs.com/skyivben/archive/2009/03/02/1401728.html1017. The StaircasesTime Limit: 1.0 secondMemory Limit: 16 MBOne curious child has a set of N little bricks (5 ≤ N ≤ 5转载 2014-02-12 23:03:06 · 682 阅读 · 0 评论 -
K-based Numbers(DP)
DescriptionLet’s consider K-based numbers, containing exactly N digits. We define a number to be valid if its K-based notation doesn’t contain two successive zeros. For example:1010230 is a原创 2014-01-26 10:03:49 · 598 阅读 · 0 评论 -
HDU1081 && POJ1050(求最大子矩阵和)
#include #include #include using namespace std;int dp[305];int n;int getmax(){ int i; int maxn=-999999999; int dpp[305]; dpp[0]=dp[0]; for (i=1;i<=n-1;i++) { if (dpp[i-1]>0) dpp[i]原创 2014-01-25 12:57:46 · 539 阅读 · 0 评论 -
POJ2533(最长递增子序列)
O(nlogn)的算法:#include #include #include using namespace std;const int INF=100000000;int main(){ int n; scanf("%d",&n); int A[10000]; int dp[10000]; int i; for (i=0;i<=n-1;i++) sc原创 2014-01-24 12:13:56 · 624 阅读 · 0 评论 -
Play with Digits(背包变形)
DescriptionProf. Meng likes playing with digits. He finds a store selling digits made from some expensive metal. Different kinds of digits may be sold at different prices, and we may assume that t原创 2013-12-12 01:10:57 · 1024 阅读 · 0 评论 -
HDU1231(求最大子序列和)
只适用于最大和大于等于0的情况。全是负数也简单,只取最大的负数即可。#include #include #include #include using namespace std;int main(){ while (1) { int n; scanf("%d",&n); if (!n) break; int i; int A[10005];原创 2013-11-29 20:45:00 · 599 阅读 · 0 评论 -
HDU1087(动态规划)
#include #include using namespace std;int main(){ while (1) { int dp[1005]={0};//dp[n]表示以A[n]结尾的jump solution最大值 int n; scanf("%d",&n); if (!n) break; int i,j; int A[1005原创 2013-11-23 23:37:20 · 671 阅读 · 0 评论 -
POJ3624(01背包问题)
#include #include #include #include #include #include using namespace std;int main(){ int N,M; scanf("%d%d",&N,&M); int i,j; int dp[15000]={0}; int w[5000],v[5000]; fo原创 2013-11-12 22:06:38 · 912 阅读 · 0 评论 -
POJ1458(最长公共子序列)
#include #include int main(){ char a[10000],b[10000]; while (scanf("%s",a)!=EOF) { scanf("%s",b); int c[2][10000]={{0}}; int i,j; int length1=strlen(a); int length2=strlen(b);原创 2013-05-29 22:26:54 · 456 阅读 · 0 评论 -
HDU4504
#include int main(){ __int64 A,B,t; while (scanf("%I64d",&A)!=EOF) { __int64 dp[20][61]={{0}}; scanf("%I64d%I64d",&B,&t); __int64 num=t/15,temp=num; if (num%2==0) num/=2; else num原创 2013-04-13 10:22:24 · 597 阅读 · 0 评论 -
Sicily1767(双线程动态规划)
NOIP2008传纸条,有点神奇的动态规划。重合时赋值为0,则不会出现重合的情况。#include #include #include #include using namespace std;int dp[110][52][52]={{{0}}};int main(){ int m,n; while (scanf("%d%d",&m,&n)!=EOF) { mem原创 2013-12-01 00:52:29 · 907 阅读 · 0 评论 -
hdu2583
#include #include #include #include #include #include int main(){ int dp[101][101]; memset(dp,0,sizeof(dp)); dp[1][0]=1; dp[1][1]=0; int i,j; for (i=2;i<=100;i++) { dp[i][0]=1; for原创 2015-03-07 18:52:40 · 467 阅读 · 0 评论