
动态规划
不可不戒
这个作者很懒,什么都没留下…
展开
-
hdu1159 Common Subsequence
#include #include #define MAXN 1002int dp[MAXN][MAXN];int main(){ char str1[MAXN],str2[MAXN]; int i,j,len1,len2; while(scanf("%s %s",str1,str2)!=EOF) { memset(dp,0,sizeof(dp)); len1=str原创 2013-07-21 13:02:35 · 685 阅读 · 0 评论 -
hdu1176 免费馅饼
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176状态转移方程:dp[i][j]=ma(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1])类似数塔问题:从底向上#include #include #define MAXN 100002int dp[MAXN][13];int Max(int原创 2013-08-13 14:42:01 · 527 阅读 · 0 评论 -
hdu1069 Monkey and Banana
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069#include #include #define INF 9999999int box[102][3],height[102];int number;//砖块总数3*n+1void oriente(int index,int a,int b,int c){//(a,b原创 2013-08-13 15:22:41 · 768 阅读 · 0 评论 -
hdu1978 How many ways
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1978题解:状态转移方程:dp[i+k][j+h]=(dp[i+k][j+h]+dp[i][j])%10000;#include #include #define MAXN 102int dp[MAXN][MAXN];int main(){ int i,j,k,h原创 2013-08-25 18:11:44 · 620 阅读 · 0 评论 -
hdu2845 Beans (最大不连续子序列和)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2845题意:求最大不连续子序列和(取了当前数字,则前一个后一个都不能取,前一行后一行也不能取)状态转移方程:dp[i]=max(dp[i-1],dp[i-2]+dp[i])#include #include #define MAXN 200002int dp[MAXN原创 2013-08-14 09:28:08 · 1548 阅读 · 0 评论 -
hdu1505 City Game (最大子矩形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1505题解:hdu1506的二维情况,见hdu1506题解。#include #include #define MAXN 1002 int height[MAXN],left[MAXN],right[MAXN];int main(){ int n,m,i,j,a原创 2013-08-15 11:22:20 · 708 阅读 · 0 评论 -
hdu1506 Largest Rectangle in a Histogram
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506对于每一块木板,Area=height[i]*(j-k+1) 其中,jxk,height[x]>=height[i];#include #define MAXN 100005_int64 height[MAXN],left[MAXN],right[MAXN];原创 2013-08-15 10:34:41 · 630 阅读 · 0 评论 -
hdu2577 How to Type
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2577题解:dp[i][0]存放当前是小写状态,dp[i][1]存放当前是大写的状态。 小写字母可在caps lock不亮时打出,也可在caps lock亮时,按shift打出 大写字母可在caps lock亮时打出,也可在caps lock不亮时,按原创 2013-08-15 20:47:53 · 641 阅读 · 0 评论 -
hdu2089 不要62 (数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089#include #include int dp[10][3],digits[10];void Init(){ int i; dp[0][0]=1; dp[0][1]=dp[0][2]=0; for(i=1;i<10;++i) { dp[i][0]原创 2013-09-21 22:34:44 · 701 阅读 · 0 评论 -
hdu3652 B-number (数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3652/*dp[len][mod][status]len表示当前位数,mod表示当前的总余数(从高位开始算)status=0:从最高位到i为没有出现13;status=1:没有出现13,第i为为1;status=2:出现13;*/#include #include原创 2013-09-22 10:48:55 · 657 阅读 · 0 评论 -
hdu3555 Bomb (数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555题解://http://www.cnblogs.com/luyi0619/archive/2011/04/29/2033117.htmldp[len][0] 代表长度为len不含49的方案数dp[len][1] 代表长度为len不含49但是以9开头的数字的方案数dp[len原创 2013-09-21 18:26:55 · 662 阅读 · 0 评论 -
hdu2571 命运
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571//状态转移方程:dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i][j%k])#include #include int dp[21][1002];int main(){ int n,m,i,j,k,temp,test; scanf("原创 2013-08-13 14:08:38 · 571 阅读 · 0 评论 -
hdu1087 Super Jumping! Jumping! Jumping!
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087求最大递增子序列和#include #include int main(){ int a[1101],b[1101],n,i,j,sum; while(scanf("%d",&n)&&n) { for(i=0;i<n;i+原创 2013-08-13 15:43:09 · 551 阅读 · 0 评论 -
hdu1412 搬寝室
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1421状态转移方程:dp[i][j]=Min(dp[i-1][j],dp[i-2][j-1]+temp*temp);temp=w[i]-w[i-1];//dp[i][j]表示前i个物品中选j对的最小疲劳度#include #include #include #define INF原创 2013-08-12 21:56:52 · 649 阅读 · 0 评论 -
hdu1844 最大报销额
/*状态方程为dp[j]=max(dp[j],dp[j-1]+money[i]);即报销j个发票所得到的最大经费,可以第j个是报销的,也可以是第j个不报销而最大经费是由前j-1个发票加上另外第i个发票的报销数额*/#include #include int main(){ double sum,Q,asum,bsum,csum,price,ans; double dp[35],m原创 2013-07-22 20:52:00 · 1122 阅读 · 0 评论 -
hdu1231 最大连续子序列
#include #include #define MIN -999999999int main(){ int k; int arr[10002]; while(1) { int i,max_sum=MIN,first=0,last=0,sum=0,x=0; int flag=0; memset(arr,0,s原创 2013-07-22 18:14:24 · 822 阅读 · 0 评论 -
hdu1158 Employment Planning
#include #define INF 0x3fffffint dp[15][10002],arr[15];int main(){ int n,i,j,k,min,maxnum,hire,salary,fire; while(scanf("%d",&n)&&n) { scanf("%d %d %d",&hire,&salary,&fire); maxnum=0; f原创 2013-07-21 20:50:49 · 569 阅读 · 0 评论 -
hdu1300 Pearls
#include #include #define INF 0x7ffffff//dp[i]=min(dp[j]+(arr[i]-arr[j]+10)*price[i]int main(){ int n,test,i,j,min,mi; int dp[102],arr[102],price[102]; scanf("%d",&test); while(test--) { s原创 2013-07-22 10:14:23 · 702 阅读 · 0 评论 -
hdu1422 重温世界杯
#include #define MAXN 200002//求最长子序列和int dp[MAXN];int main(){ int w,l,n,sum,cnt,maxn,i; while(scanf("%d",&n)!=EOF) { for (i=1;i<=n;i++) { scanf("%d %d",&w,&l); dp[i]=dp[i+n]=w-l;原创 2013-07-22 13:28:42 · 781 阅读 · 0 评论 -
hdu2391 Filthy Rich
#include #include #define MAXN 1002int dp[MAXN][MAXN],map[MAXN][MAXN];int Max(int a,int b,int c){ int temp; temp=a>b?a:b; temp=temp>c?temp:c; return temp;}int main(){ int test,r,c,i,j,原创 2013-07-26 21:06:46 · 802 阅读 · 0 评论 -
hdu1723 Distribute Message
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1723题解:dp[i]表示传到第i个有dp[i]种方法,i可以传给后面1--m之间任意一个人dp[i+j]+=dp[i]#include #include int main(){ int n,m,i,j; int dp[32]; while (scanf("%d %原创 2013-08-23 08:09:31 · 689 阅读 · 0 评论 -
动态规划
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能转载 2013-08-12 19:46:33 · 719 阅读 · 0 评论 -
hdu4540 威威猫系列故事——打地鼠
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4540状态转移方程:dp[i][j]=min(dp[i][j],dp[i-1][k]+abs(coord[i][j]-coord[i-1][k]))#include #include #include #define INF 999999#define MAXN 22/原创 2013-08-12 20:38:10 · 829 阅读 · 0 评论 -
hdu2151 Worm
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2151//状态转移方程:dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1]//dp[i][j]表示从初始状态至第i分钟第j棵树的行走方案数#include #include #define MAXN 102int dp[MAXN][MAXN];int mai原创 2013-08-12 21:00:46 · 601 阅读 · 0 评论 -
hdu4722 Good Numbers (数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722#include #include _int64 dp[20][10];int digits[20];_int64 DFS(int pos,int mod,int limit){ int end,i,nmode; _int64 sum=0; if原创 2013-09-22 14:26:59 · 698 阅读 · 0 评论