HDU dp训练

1. 1003 最大和连续子序列

状态方程:dp[i]=max(dp[j-1]+num[i],num[i]);

解:存放dp数组每个元素都是从左至右最大连续子序列的值,即dp[i]为从0~i处最大连续子序列的值

注意边界

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 using namespace std;
 5 #define N 100005
 6 int dp[N];
 7 int a[N];
 8 int main()
 9 {
10     int t;
11     while(scanf("%d",&t)!=EOF)
12     {
13         int c=1,T=t;
14         while(t--)
15         {
16             memset(dp,0,N);
17             int n;
18             scanf("%d",&n);
19             for(int i=1; i<=n; i++)
20             {
21                 scanf("%d",&a[i]);
22             }
23             dp[1]=a[1];
24             for(int j=2; j<=n; j++)
25             {
26                  dp[j]=max(dp[j-1]+a[j],a[j]);
27             }
28
29             int mx=-999999999;
30             int st=0,en=0;
31             for(int i=1; i<=n; i++)
32                 if(mx<dp[i])
33                 {
34                     mx=dp[i];
35                     en=i;
36                 }
37             st=en;
38             int sum=0;
39             for(int i=en; i>=1; i--)
40             {
41                 sum+=a[i];
42                 if(sum==mx)
43                 {
44                     st=i;
45                 }
46             }
47             printf("Case %d:\n%d %d %d\n",c,mx,st,en);
48             if(c!=T)printf("\n");
49             c+=1;
50         }
51     }
52     return 0;
53 }

2. 1087 最大和连续递增子序列

状态方程:v[i]=max(v[i],v[j]+num[i]);

解:存放dp数组的每个元素都是从左至右最大和递增子序列的值,即dp[i]为0~i处最优最大和递增子序列的值

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define N 1005
 4 int num[N];
 5 int v[N];
 6 int main()
 7 {
 8     int n;
 9     while(scanf("%d",&n)!=EOF&&n)
10     {
11         memset(v,0,sizeof(v));
12         for(int i=1; i<=n; i++)
13             scanf("%d",&num[i]);
14
15         for(int i=1; i<=n; i++)
16         {
17             for(int j=1; j<i; j++)
18             {
19                 if(num[i]>num[j])
20                     v[i]=max(v[i],v[j]+num[i]);
21             }
22             v[i]=max(v[i],num[i]);
23         }
24         int mx=-999999;
25         for(int i=1; i<=n; i++)
26         {
27             mx=max(mx,v[i]);
28         }
29         printf("%d\n",mx);
30     }
31     return 0;
32 }

时间: 2024-12-28 01:49:21

HDU dp训练的相关文章

Hdu dp

4856 这题说的是给了一个图 这个图有很多的隧道每个隧道是单向的 只能从一个入口进入从另一个入口出来 要求计算出走完这些隧道花的总时间 因为这个图是一个网格行的然后 先用bfs算出隧道的出口到每个隧道的入口的最短距离然后进行一次TSP 意思是 dp[S][v] 表 示 从 点 v 出发已经经过了 S中每个二进制表示的点然后求得了结果 #include <iostream> #include <string.h> #include <cstdio> #include &

hdu 1171 Big Event in HDU DP

Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 25438    Accepted Submission(s): 8947 Problem Description Nowadays, we all know that Computer College is the biggest department

[DP训练]rqnOJ

P188 购物问题 题目梗概: n个物品,其中每个物品价格xi,但是某两个物品不能同时购买. 问最大的价格是多少? 思考与理解: 一开始并没有想到树形背包DP,只是一直在想是不是分组背包~ 在之后瞅了瞅题解的思路之后,恍然大悟. 先把有限制的物品之间的关系转换为父子关系就可以进行DP了. 对于每个有限制的物品要不选 要么不选 选的话会有什么结果 不选的话有什么结果. 如果没有限制的话 那么肯定是要买的~ #include <cstdio> #include <algorithm>

HDU DP?(Lucas + 帕森斯定理)

DP? 题目链接:Click Here~ 题目分析: 给出一个终点坐标,求出(0,0)开始的到(n,k)的最小权重和. 算法分析: 根据杨辉三角的性质可以知道,只要往两边走则得到的值会更小.因为,C(N,M) = C(N,N-M).所以,我们尽量的斜向的往旁边走.但是,在斜向走k步后就已经到达边界了,此时只要顺着1一直往上走就可以了.所以,经过的最短路和为:C(n,k) + C(n-1,k-1) + C(n-2,k-2) + ...... C(n - k + 1,1)+ C(n - k,0) +

Dp46道和近期小结

最近做题比较散漫,无脑.中间打了个校赛,弱弱的水了几题,然后就挂机了,最后一个半小时都在酱油,结果也不是很好. 中间大概有三场bc是爆零了,快浅绿了.cf 打了两场只有only div2的,还好比较容易涨,大号终于紫了. Hdu Dp入门题总结,时间隔的比较长,大概有一个月了..网上写的也比较详细,这6题还是记忆犹新的,其他的就不说了. Cstructing Roads http://acm.hdu.edu.cn/showproblem.php?pid=1025 以前做过,按照一维排序,另一位用

HDU 4901(杭电多校训练#3 1005题)The Romantic Hero(DP)

题目地址:HDU 4901 这题没想到最后居然能够做出来.... 这题用了两次DP,先从前往后求一次异或的,再从后往前求一次与运算的.分别是 1:求异或的时候,定义二维数组huo[1000][1024],前者指第几位,后者是哈希的思想,若huo[x][y]=2则表示最右边的数为第x位时,异或值为y的出现了两次,需要再定义一个hash数组,来保存前面出现的所有情况,再找有多少位的时候,用hash数组中出现的所有的值与当前的第x位的数字进行异或. 2:求与的时候,定义二维数组yu[1000][102

hdu 4960 Another OCD Patient(dp)2014多校训练第9场

Another OCD Patient                                                                         Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description Xiaoji is an OCD (obsessive-compulsive disorder) pat

hdu 4901 The Romantic Hero(计数dp)2014多校训练第4场1005

The Romantic Hero                                                                               Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description There is an old country and the king fell in lov

hdu 4939 Stupid Tower Defense(DP)2014多校训练第7场

Stupid Tower Defense                                                                         Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description FSF is addicted to a stupid tower defense game. Th