1001  即hdu 1003 Max Sum

状态转移方程 dp[i]=max(dp[i],dp[i-1]);没这么写

是相邻最大和的题,以前做过的题,数组开小了,wa了4次,最后才发现,弱暴了

View Code

#include<stdio.h>int num[100005];int main(){

int T,cas=1;    scanf("%d",&T);while(cas<=T)    {if(cas!=1) printf("\n");int n; scanf("%d",&n);for(int i=1;i<=n;i++)        scanf("%d",&num[i]);int sum=0,max=-99999,s=1,e=1,pos=1;for(int i=1;i<=n;i++)        {

if(sum<0)            {sum=num[i];pos=i;}else sum+=num[i];

if(max<sum)            {                s=pos;                max=sum;                e=i;            }        }        printf("Case %d:\n%d %d %d\n",cas++,max,s,e);    }return 0;}

1002   即hdu 1081 To The Max

1001 这道题的变形,变成2维的了,自己写了个还是wa,还是没学好啊,百度下发现,思考不全面

先是1--n行枚举+一维的dp

View Code

#include<stdio.h>#include<string.h>int num[105][105],ss[105];int main(){int n;while(~scanf("%d",&n))   {for(int i=0;i<n;i++)for(int j=0;j<n;j++)         {             scanf("%d",&num[i][j]);         }int max=-99999;for(int i=0;i<n;i++)       {         memset(ss,0,sizeof(ss));for(int j=i;j<n;j++)         {int t=0;for(int k=0;k<n;k++)             {                 ss[k]+=num[j][k];if(t<=0) t=ss[k];else t+=ss[k];if(t>max) max=t;             }         }       }       printf("%d\n",max);   }return 0;}

1003   hdu 1025 Constructing Roads In JGShining's Kingdom

不知怎么的总是有tle的思路代码,这题呢,经典的lis 题,

View Code

#include<stdio.h>#define N 500005int map[N],flag[N];int main(){int n,cas=1;while(~scanf("%d",&n))    {for(int i=1;i<=n;i++)        {int a,b;            scanf("%d%d",&a,&b);            map[a]=b;        }int low,hig,mid,top=1;        flag[1]=map[1];for(int i=2;i<=n;i++)        {            low=1;hig=top;while(low<=hig)            {                mid=(low+hig)/2;if(flag[mid]<map[i])                low=mid+1;else hig=mid-1;            }            flag[low]=map[i];if(low>top) top++;        }        printf("Case %d:\n",cas++);if(top==1)             printf("My king, at most %d road can be built.\n\n",top);else             printf("My king, at most %d roads can be built.\n\n",top);    }return 0;}

1004  即hdu1058 Humble Numbers

做过的题了,自己做的思路 感觉定位在 枚举还是比较合适,不合主题~o_o

2 3 5 7  和 前 n-1 个数从大到小枚举

View Code

#include<stdio.h>__int64 str[5845];int main(){int n;int b[4]={2,3,5,7};    str[1]=1;for(int i=2;i<=5842;i++)    {        str[i]=2000000005;for(int j=0;j<4;j++)        {for(int k=i-1;k>=1;k--)          {if(str[k]*b[j]<=str[i-1]) break;if(str[i]>str[k]*b[j])              str[i]=str[k]*b[j];          }        }    }while(scanf("%d",&n),n)    {        printf("The %d",n);if(n%10==1&&n%100!=11) printf("st");else if(n%10==2&&n%100!=12) printf("nd");else if(n%10==3&&n%100!=13) printf("rd");else printf("th");        printf(" humble number is %I64d.\n",str[n]);    }return 0;}

1005  即hdu 1080 Human Gene Functions

自己没想出来思路,百度的

先把字符处理成int ,然后就是 dp转移方程

grah[i][j]=max(grah[i-1][j-1]+score[ps[a[i-1]]][ps[b[j-1]]]
           ,max(grah[i][j-1]+score[4][ps[b[j-1]]],grah[i-1][j]+score[4][ps[a[i-1]]]));

经典啊,我的想法走歪了

View Code

#include<iostream>#include<map>#include<string>#include<algorithm>using namespace std;map<char,int > ps;

int main(){    ps['A']=0;ps['C']=1;ps['G']=2;ps['T']=3;ps['-']=4;const int score[5][5]=    {{5,-1,-2,-1,-3},    {-1,5,-3,-2,-4},    {-2,-3,5,-2,-2},    {-1,-2,-2,5,-1},    {-3,-4,-2,-1,0}};int n;cin>>n;while(n--)    {string a,b;int lena,lenb;     cin>>lena>>a>>lenb>>b;int grah[105][105];     grah[0][0]=0;for(int i=1;i<=lena;i++)     grah[i][0]=grah[i-1][0]+score[ps[a[i-1]]][4];for(int i=1;i<=lenb;i++)     grah[0][i]=grah[0][i-1]+score[4][ps[b[i-1]]];

for(int i=1;i<=lena;i++)for(int j=1;j<=lenb;j++)       {           grah[i][j]=max(grah[i-1][j-1]+score[ps[a[i-1]]][ps[b[j-1]]]           ,max(grah[i][j-1]+score[4][ps[b[j-1]]],grah[i-1][j]+score[4][ps[a[i-1]]]));       }       cout<<grah[lena][lenb]<<endl;    }return 0;}

转载于:https://www.cnblogs.com/skyming/archive/2011/12/02/2272693.html

SDUT_经典线型DP相关推荐

  1. hdu 2196(经典树形dp)

    题意:给你一颗边带权值的树,求树上的每一点距离其最远的一个点的距离 解题思路:这道题网上说是经典的树形dp,不过确实很巧妙.两次dfs应该是比较好想到的,因为某节点最大的距离要么就是一直走到叶子节点, ...

  2. USACO / A Game (经典区间DP)

    A Game游戏 IOI'96 - Day 1 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的两端取数,取数后该数 ...

  3. 石子合并——最经典的dp问题

    石子合并三大题型 任意两堆石子合并,直接手写一个小根堆,每次取前面两个相加,得到的值继续放入优先队列中,直到里面只有一个元素就输出 只能合并相邻两堆石子,这就类似于矩阵连乘(传送门),不过还是有一些差 ...

  4. HDU 3534 Tree (经典树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3534 题意: 给你一棵树,问你有多少对点的距离等于树的直径. 思路: dp[i][0]表示在i的子树中 ...

  5. poj 2152 Fire - 经典树形dp

    题目链接: http://poj.org/problem?id=2152 不多说.. 2006 陈启峰消防站解题报告 这dp简直是神了.. #include <cstdio> #inclu ...

  6. LeetCode 1000. 合并石头的最低成本(经典区间DP)

    1000. 合并石头的最低成本 定义dp[i][j]为尽可能多的合并区间[i, j] 所需的成本,不一定能合并成一堆,但合并完成后剩下的堆数一定小于k,更具体地,剩余的堆数一定是(n - 1) % ( ...

  7. LintCode 92: Backpack (经典背包DP题)

    Backpack 中文English Given n items with size Ai, an integer m denotes the size of a backpack. How full ...

  8. Leetcode 312. 戳气球(经典区间dp)

    为了避免边界问题,我们重新开一个数组,在两个端点加入哨兵1.此时数组下标为0到n+1 状态的定义如下,f[i][j] 表示将区间[i+1,j-1]的气球全部戳爆的最大收益. 我们要求的答案就是f[0] ...

  9. 算法讲解 -- 区间dp经典模型与优化(石子归并)

    石子合并问题是最经典的DP问题.首先它有如下3种题型: PPT讲解:点击打开链接 (1)有N堆石子,现要将石子有序的合并成一堆,规定如下:每次只能移动任意的2堆石子合并,合并花费为新合成的一堆石子的数 ...

  10. HDU 1500(经典的恶心DP)

    这是比较经典的DP  有一点很明显 却很难肯定的 那就是在最好的分组方案中,每组中两根较短的筷子在有序筷子数列中一定是相邻的 dp[j][i]表示从前i根筷子中挑出j组(不考虑第三根) dp[j][i ...

最新文章

  1. Go 知识点(11) — goroutine 泄露、设置子协程退出条件
  2. android原理揭秘系列之VacantCell缓存
  3. 【MaxCompute】学习笔记操作表sql
  4. 最好的oracle笔记,Oracle学习笔记(一)
  5. 怎样进入服务器修改东西,进入服务器修改数据库
  6. php命令执行无法重定向输出,php – CodeIgniter 3重定向功能无法正常工作
  7. 工程师总结:单片机C语言编程心得
  8. Zabbix-3.0.0 安装Graphtree
  9. Android adb命令选择设备操作
  10. 下一较大值(一,二)
  11. [转].net cookie版购物车
  12. 2018修复激活闪退_IOS越狱后和平精英闪退、黑屏、10min封号的解决办法!
  13. mysql 修改多表数据库_mysql数据库:mysql增删改、单表、多表及子查询
  14. 快速排序的python实现
  15. 递归 非递归 遍历二叉树
  16. 遥感原理与应用总结——第一章:遥感原理的基本概念
  17. 自然语言处理(NLP):命名实体识别-NER
  18. vue 带节假日考勤状态的日历
  19. 基于遗传算法的柔性车间调度优化研究附Matlab代码
  20. 星期几—YYYY-MM-DD,表示一个日期,你知道是星期几吗?

热门文章

  1. python plot 增加标记线_Python可视化| matplotlib04-掌握标记和线型的使用,一文,marker,linestyle...
  2. 解决:Maven resources compiler: Maven project configuration required for module ‘c,不识别Maven项目
  3. Debug日志正常,输出和HTML页面乱码
  4. SpringMVC的RESTful(一)
  5. float.valueof()自动截取有效位数
  6. java 泛型的类型擦除和桥方法
  7. CentOS 配置防火墙操作实例(启、停、开、闭port)
  8. javasript深度拷贝
  9. Android判断App是否在前台运行
  10. The most impressed error