![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划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 · 494 阅读 · 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 · 657 阅读 · 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 · 725 阅读 · 0 评论 -
携程初赛1001
聪明的猴子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 0 Accepted Submission(s): 0 Problem Description 森林中有一排香蕉树(无限长),一只猴子站在其中一棵树原创 2014-04-10 21:14:42 · 1236 阅读 · 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 · 2012 阅读 · 0 评论 -
POJ3311(状态压缩DP+Floyd)
不知道为什么min写成#define min(x,y) (原创 2014-05-30 20:57:36 · 931 阅读 · 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 · 484 阅读 · 0 评论 -
POJ1274(多重背包)
二进制拆分。原创 2014-07-11 13:26:18 · 471 阅读 · 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 · 486 阅读 · 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 · 793 阅读 · 0 评论 -
Sicily1121
dp[i][j]表示第i列第j种切口情况的原创 2014-10-18 20:32:09 · 1005 阅读 · 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 · 826 阅读 · 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 · 1160 阅读 · 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 · 447 阅读 · 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 · 496 阅读 · 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 · 618 阅读 · 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 · 658 阅读 · 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 · 536 阅读 · 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 · 731 阅读 · 0 评论 -
Ural1577(DP)
F - E-mail Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Practice URAL 1577 Description Vasya started to use the Internet not so long a原创 2014-02-27 10:22:51 · 658 阅读 · 0 评论 -
Ural1017(DP)
转自:http://www.cnblogs.com/skyivben/archive/2009/03/02/1401728.html 1017. The Staircases Time Limit: 1.0 second Memory Limit: 16 MB One curious child has a set of N little bricks (5 ≤ N ≤ 5转载 2014-02-12 23:03:06 · 677 阅读 · 0 评论 -
K-based Numbers(DP)
Description Let’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 · 593 阅读 · 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 · 536 阅读 · 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 · 619 阅读 · 0 评论 -
Play with Digits(背包变形)
Description Prof. 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 · 1015 阅读 · 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 · 595 阅读 · 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 · 662 阅读 · 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 · 904 阅读 · 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 · 451 阅读 · 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 · 587 阅读 · 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 · 896 阅读 · 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 · 456 阅读 · 0 评论