【HDUOJ】几道递推DP

就不写题解了。很基础的递推。



HDU2084数塔

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084

代码:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5
 6 using namespace std;
 7 const int maxn = 105;
 8
 9 int dp[maxn][maxn];
10 int a[maxn][maxn];
11
12 int main(){
13     int T;
14     cin>>T;
15     while(T--){
16         memset(a,0,sizeof(a));
17         memset(dp,0,sizeof(dp));
18         int n;
19         cin>>n;
20         for(int i = 1; i <= n ;i++){
21             for(int j = 1; j <= i; j++){
22                 cin>>a[i][j];
23             }
24         }
25
26         for(int i = n; i > 0; i--){
27             for(int j = 1; j <= n ;j++){
28                 dp[i][j] = max(dp[i+1][j] ,dp[i+1][j+1]) + a[i][j];
29             }
30         }
31         cout<<dp[1][1]<<endl;
32     }
33
34
35     return 0;
36 }


HDU2018母牛的故事

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2018

代码:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5
 6 using namespace std;
 7 const int maxn = 105;
 8 int dp[maxn];
 9
10 void init(){
11     dp[1] = 1;
12     dp[2] = 2;
13     dp[3] = 3;
14     dp[4] = 4;
15     dp[5] = 6;
16     for(int i = 6; i <= 55; i++){
17         dp[i] = dp[i-1] + dp[i-3];
18     }
19 }
20
21 int main(){
22     int n;
23     init();
24     while(cin>>n && n){
25         cout<<dp[n]<<endl;
26     }
27
28     return 0;
29 }


HDU2044小蜜蜂的故事

同类型HDU2041

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2044

代码:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 #define ll long long
 6 using namespace std;
 7 const int maxn = 55;
 8 ll fib[maxn];
 9
10 void init(){
11     fib[0] = 0;
12     fib[1] = 1;
13     fib[2] = 2;
14     for(int i = 3 ;i <= maxn ;i++){
15         fib[i] = fib[i-1] + fib[i-2];
16     }
17 }
18
19 int main(){
20     init();
21     int n,m;
22     int T;
23     cin>>T;
24     while(T--){
25         cin>>n>>m;
26         cout<<fib[m-n]<<endl;
27     }
28
29
30     return 0;
31 }


HDU2050

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2050

代码:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 #define ll long long
 6 using namespace std;
 7 const int maxn = 10005;
 8 ll dp[maxn];
 9
10 void init(){
11     dp[1] = 2;
12     dp[2] = 7;
13     for(int i = 3; i <= maxn; i++){
14         dp[i] = dp[i-1] + 4*(i-1) + 1;
15     }
16 }
17
18 int main(){
19     int T;
20     cin>>T;
21     int n;
22     init();
23     while(T--){
24         cin>>n;
25         cout<<dp[n]<<endl;
26     }
27
28     return 0;
29 }

原文地址:https://www.cnblogs.com/Asumi/p/9769934.html

时间: 2024-10-15 09:40:28

【HDUOJ】几道递推DP的相关文章

递推DP UVA 1366 Martian Mining

题目传送门 1 /* 2 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 3 到达边界后把沿途路上的权值相加求和使最大 4 DP:这是道递推题,首先我题目看了老半天,看懂后写出前缀和又不知道该如何定义状态好,写不出状态转移方程,太弱了. 5 dp[i][j]表示以(i, j)为右下角时求得的最大值,状态转移方程:dp[i][j] = max (dp[i-1][j] + sum1[i][j], dp[i][j-1] + sum2[i][j])

hdu 1284 钱币兑换问题 (递推 || DP || 母函数)

钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5069    Accepted Submission(s): 2868 Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法.请你编程序计算出共有多少种兑法. Input 每行只有一个正整数N,N小于32768. Outpu

D. Caesar&#39;s Legions 背包Dp 递推DP

http://codeforces.com/problemset/problem/118/D 设dp[i][j][k1][k2] 表示,放了i个1,放了j个2,而且1的连续个数是k1,2的连续个数是k2 如果这样写,用dfs写是很简单的.但是超时,我记忆化不到 如果用递推写,对于每一个状态,更新到下一个状态. 如果放的是1,那么新的状态是dp[i + 1][j][k1 + 1][0]也就是,用多了一个1,而且连续的个数也增加了.同时,2的连续个数就打破了,变成了0 这种枚举旧状态,更新下一个状态

递推DP URAL 1031 Railway Tickets

题目传送门 1 /* 2 简单递推DP:读题烦!在区间内的都更新一遍,dp[]初始化INF 3 注意:s1与s2大小不一定,坑! 4 详细解释:http://blog.csdn.net/kk303/article/details/6847948 5 */ 6 #include <cstdio> 7 #include <iostream> 8 #include <algorithm> 9 #include <cstring> 10 #include <s

递推DP URAL 1119 Metro

题目传送门 1 /* 2 题意:已知起点(1,1),终点(n,m):从一个点水平或垂直走到相邻的点距离+1,还有k个抄近道的对角线+sqrt (2.0): 3 递推DP:仿照JayYe,处理的很巧妙,学习:) 4 好像还要滚动数组,不会,以后再补 5 */ 6 #include <cstdio> 7 #include <iostream> 8 #include <algorithm> 9 #include <cmath> 10 #include <cs

Code Force 429B Working out【递推dp】

Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to look hot at the beach. The gym where they go is a matrix a with n lines and mcolumns. Let number a[i][j] represents the calories burned by performing workout at the

递推DP UVA 607 Scheduling Lectures

题目传送门 题意:教授给学生上课,有n个主题,每个主题有ti时间,上课有两个限制:1. 每个主题只能在一节课内讲完,不能分开在多节课:2. 必须按主题顺序讲,不能打乱.一节课L时间,如果提前下课了,按照时间多少,学生会有不满意度.问最少要几节课讲完主题,如果多种方案输出不满意度最小的 分析:dp[i]表示前i个主题最少要多少节课讲完,那么这个主题可能和上个主题在同一节课讲或者多开新的一节课讲,状态转移方程:看代码:优先满足节数少的情况 收获:普通的递推DP 代码: /**************

CodeForces Round#229 DIV2 C 递推DP

对这道题目也只好说呵呵了,没注意k的范围最大才10,所以昨晚纠结了很久,没什么好的方法来处理,后来无奈想去翻翻题解,发现人家开头就来了句,因为k的范围比较小 所以.........我只好暂停马上回头看看题目,是的,k比较小所以完全可以先在询问前预处理DP一遍, DP就比较清晰了,dp[i][j]  (i>=0 && i<k,,,,j>=i && j <=n)代表意义呢 以i为开头的  区间[1,j]注意 是 1~j的 所需要的操作数,题目问的是最小操

[递推dp] zoj 3747 Attack on Titans

题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5170 Attack on Titans Time Limit: 2 Seconds      Memory Limit: 65536 KB Over centuries ago, mankind faced a new enemy, the Titans. The difference of power between mankind and their newf