![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
拉风的啤酒肚
菜鸟一枚若发表的文章有所错误望各位大神提出意见
展开
-
HDU1505--City Game(动态规划)(1506加强版)
这道题和1506差不多,多加了一维,只要求出每个F点上面的F点个数,然后压到一行中,就和1506一样了。#include #include #include #include #include #define maxn 1005using namespace std;struct Map{ char c[5]; int num; int left,right;}map原创 2013-11-16 19:36:32 · 802 阅读 · 0 评论 -
HDU3339--In Action(最短路+0-1背包)
先用最短路求出0到i点的最短距离,然后再用0-1背包做。#include #include #include #include #include #define INF 999999999#define M 105using namespace std;int main(){ int map[M][M],p[M],dp[M*M]; int n,m,t,i,j,k,sum原创 2014-01-25 20:43:08 · 916 阅读 · 0 评论 -
POJ3176----Cow Bowling
题目意思不多了,从题目中的图可以理解,就是让我们求最大值。刚开始我用了DFS,结果超时了,后来就改用了DP。#include #include #define max(a,b) a>b?a:bint n,i,j,map[355][355],dp[355][355];int main(){scanf("%d",&n);for(i=1原创 2013-08-17 11:03:35 · 698 阅读 · 0 评论 -
HDU1087----Super Jumping! Jumping! Jumping!
就是求最长上升序列。#include #include #include #include #define max(a,b) a>b?a:busing namespace std;int main(){ int n,i,j,a[1006],dp[1005]; while(scanf("%d",&n),n) { for(i=1;i<=n;i++) scanf("%原创 2013-09-01 19:44:54 · 573 阅读 · 0 评论 -
HDU1864----最大报销额
只要把数据处理下,就是01背包了。。#include #include #include #include #define max(a,b) a>b?a:busing namespace std;int main(){ int n,m,i,j,flag[35]; double p[35]; char ch; double sum[35],dp[35]; double原创 2013-09-01 16:17:29 · 700 阅读 · 0 评论 -
HDU--2955
找到状态转移方程即可。#include #include #include #include #define max(a,b) a>b?a:busing namespace std;int main(){ int t,i,j,n,m[105]; double v[105],p,dp[105*105]; scanf("%d",&t); while(原创 2013-11-14 20:43:35 · 459 阅读 · 0 评论 -
HDU-2059
#include #include #include #include #include #define INF 10000000.0using namespace std;int main(){ double l,c,t,p[105],dp[105],vr,v1,v2,time,Min; int n,i,j; while(scanf("%lf",&l)!=EOF) {原创 2013-11-14 20:35:21 · 515 阅读 · 0 评论 -
HDU1789--Doing Homework again(贪心)
思路:在截止日期之前,我们应该优先选择那些罚分多的任务去完成,所以我们可以先按截止日期从小到大,相同则按任务的罚分从大到小进行排序。仅仅是排序显然是不行的,如例题中的第二个案例,显然(4,5)优先于(1,3)。我们可以枚举过去,如果day大于这个任务的截止日期,那么就找前面是否有比这个任务的罚分小的任务,如果有,则互相交换位置,如果没有,则reduce加上这个任务的罚分。#include #原创 2013-11-18 20:23:18 · 1013 阅读 · 0 评论 -
HDU1506--Largest Rectangle in a Histogram (动态规划)
用动态规划的思想分别求出当前建筑向左边所能延伸的递减的(相等的也行)建筑高度的左边界和当前建筑向右边所能延伸的递减的(相等的也行)建筑高度的右边界。由右边界和左边界,即可得出长度,面积就是长度*高度。#include #include #include #include #include #define LL __int64#define maxn 100005using nam原创 2013-11-16 09:38:18 · 721 阅读 · 0 评论 -
HDU2577--How to Type
转自: http://www.cnblogs.com/mengxm-lincf/archive/2011/06/07/2074489.html#include #include #include #include using namespace std;int main(){ int t,i,j; int step[105][2]; char ch[105];转载 2013-11-16 21:50:30 · 732 阅读 · 0 评论 -
HDU1069(最长单调递减数列)
告诉你n种规模的长方体的长,宽,高,每种规模的长方体个数不限,问你最多能搭多高的塔,塔是由这些长方体搭的,自上而下,每一块长方体都要比在它下面的长方体的规模小,即长和宽都比下面的长方体要小。注意长方体是可以调整的。我们用dp[i]来表示搭建到第i块长方体的时候塔的最高高度,那么状态转移方程就是dp[i]=max(dp[i],dp[j]+s[i].h);#include #include原创 2014-05-07 19:44:17 · 1156 阅读 · 0 评论