![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
不可不戒
这个作者很懒,什么都没留下…
展开
-
hdu1159 Common Subsequence
#include #include #define MAXN 1002 int 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 · 634 阅读 · 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 100002 int dp[MAXN][13]; int Max(int原创 2013-08-13 14:42:01 · 489 阅读 · 0 评论 -
hdu1069 Monkey and Banana
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 #include #include #define INF 9999999 int box[102][3],height[102]; int number;//砖块总数3*n+1 void oriente(int index,int a,int b,int c) {//(a,b原创 2013-08-13 15:22:41 · 729 阅读 · 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 102 int dp[MAXN][MAXN]; int main() { int i,j,k,h原创 2013-08-25 18:11:44 · 580 阅读 · 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 200002 int dp[MAXN原创 2013-08-14 09:28:08 · 1487 阅读 · 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 · 648 阅读 · 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 · 577 阅读 · 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 · 597 阅读 · 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 · 653 阅读 · 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 · 612 阅读 · 0 评论 -
hdu3555 Bomb (数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 题解://http://www.cnblogs.com/luyi0619/archive/2011/04/29/2033117.html dp[len][0] 代表长度为len不含49的方案数 dp[len][1] 代表长度为len不含49但是以9开头的数字的方案数 dp[len原创 2013-09-21 18:26:55 · 622 阅读 · 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 · 532 阅读 · 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 · 493 阅读 · 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 · 612 阅读 · 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 · 1073 阅读 · 0 评论 -
hdu1231 最大连续子序列
#include #include #define MIN -999999999 int 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 · 774 阅读 · 0 评论 -
hdu1158 Employment Planning
#include #define INF 0x3fffff int 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 · 514 阅读 · 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 · 652 阅读 · 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 · 736 阅读 · 0 评论 -
hdu2391 Filthy Rich
#include #include #define MAXN 1002 int 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 · 746 阅读 · 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 · 648 阅读 · 0 评论 -
动态规划
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。 二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能转载 2013-08-12 19:46:33 · 677 阅读 · 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 · 778 阅读 · 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 102 int dp[MAXN][MAXN]; int mai原创 2013-08-12 21:00:46 · 569 阅读 · 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 · 655 阅读 · 0 评论