下面是difficulty 1的题

1003   Max Sum

最长递增子序列。非常经典,最棒的解法是在线算法O(n)的复杂度。

贴的呢,是用dp做的代码。

先是一个高亮的dp递推式,然后找到最大处,用k记录。即所求的子序列的结尾,之后倒推,用减法推出子序列的开头位置。

要注意的点就是各个变量的初始化,初始化不好,很容易WA。还有找子序列的头的时候,倒推的时候找到等值的数是不跳出的,但是更新gx的值,因为0的存在。

 #include <iostream>
 #include <cstring>
 using namespace std;
 ];
 ];
 int main()
 {
     int t;
     cin>>t;
     ;
     while(t--)
     {
          int n;
          cin>>n;
          ;i<=n;i++)
          {
              cin>>a[i];
          }
          memset(dp,,sizeof(dp));
          ;i<=n;i++)
 {
              ]<)
                 dp[i]=a[i];
              else
                 dp[i]=dp[i-]+a[i];
 }

          ],k=;
          ;i<=n;i++)
          {
              if(dp[i]>ans)
              {
                  ans=dp[i];
                  k=i;
              }
          }
          int max=ans;
          int gx=k,sx=k;
          ;i--)
          {
              max-=a[i];
              ) sx=i;
          }

          cout<<"Case "<<p++<<":"<<endl;
          cout<<ans<<" "<<sx<<" "<<gx<<endl;
          ) cout<<endl;
     }
     ;
 }

1025   Constructing Roads In JGShining's Kingdom

这道题也是非常非常经典的,重点是怎么去想到这是一个LIS。

你把一条轴上的看成数组的下标,一条轴上的看成数组的值,一一对应起来,发现它所要求的就是该数组中的LIS。

这里写的是nlogn的LIS的方法。具体的可以看看书或者网上的博客,LIS本来朴素的做法是n²的,但是当你换一个方式dp,dp[n]表示的是长度为n+1的子序列的结尾的最大值。就可以降到nlogn。

 #include <cstdio>
 #include <iostream>
 #include <algorithm>
 using namespace std;
 +;
 const int INF = 0x3f3f3f3f;
 int road[maxn],dp[maxn];
 int main()
 {
     int n,x,y;
     ;
     while(~scanf("%d",&n))
     {
         ;i<n;i++)
             dp[i] = INF;
         ;i<n;i++)
         {
             scanf("%d%d",&x,&y);
             road[x] = y;
         }
         ;i<=n;i++)
         {
             *lower_bound(dp,dp+n,road[i]) = road[i];
         }
         int len = lower_bound(dp,dp+n,INF) - dp;

         printf("Case %d:\n",p++);
         printf("My king, at most %d road",len);
         ) printf("s");
         printf(" can be built.\n\n");
     }
     ;
 }

1058   Humble Numbers

这道题比较恶心的是输出,英文的序数词的格式orz。

这段dp也比较奇特,对当时的我来说。

 ,p2=,p3=,p5=,p7=;
 rec[i++] = ;
 )
 {
     *rec[p2],*rec[p3]);
     *rec[p5],*rec[p7]);
     rec[i] = min( one , two );
     *rec[p2]) p2++;
     *rec[p3]) p3++;
     *rec[p5]) p5++;
     *rec[p7]) p7++;
     i++;
 }
 #include <cstdio>
 #include <algorithm>
 using namespace std;

 ];
 int main()
 {
     ,p2=,p3=,p5=,p7=;
     rec[i++] = ;
     )
     {
         *rec[p2],*rec[p3]);
         *rec[p5],*rec[p7]);
         rec[i] = min( one , two );
         *rec[p2]) p2++;
         *rec[p3]) p3++;
         *rec[p5]) p5++;
         *rec[p7]) p7++;
         i++;
     }
     int n;
     while(~scanf("%d",&n) && n)
     {
          ==  && n% != )
             printf("The %dst humble number is %d.\n",n,rec[n]);
          ==  && n% != )
             printf("The %dnd humble number is %d.\n",n,rec[n]);
          ==  && n% != )
             printf("The %drd humble number is %d.\n",n,rec[n]);
         else
             printf("The %dth humble number is %d.\n",n,rec[n]);
     }
     ;
 }

1059   Dividing

hdu分类 Dynamic Programming(这是一场漫长的旅途)的更多相关文章

  1. HDU 4223 Dynamic Programming?(最小连续子序列和的绝对值O(NlogN))

    传送门 Description Dynamic Programming, short for DP, is the favorite of iSea. It is a method for solvi ...

  2. hdu 4223 Dynamic Programming?

    Dynamic Programming? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  3. hdu 4223 Dynamic Programming? (dp)

    //连续的和的绝对值最小 # include <stdio.h> # include <string.h> # include <algorithm> # incl ...

  4. hdu 4972 A simple dynamic programming problem(高效)

    pid=4972" target="_blank" style="">题目链接:hdu 4972 A simple dynamic progra ...

  5. HDU-4972 A simple dynamic programming problem

    http://acm.hdu.edu.cn/showproblem.php?pid=4972 ++和+1还是有区别的,不可大意. A simple dynamic programming proble ...

  6. 动态规划 Dynamic Programming 学习笔记

    文章以 CC-BY-SA 方式共享,此说明高于本站内其他说明. 本文尚未完工,但内容足够丰富,故提前发布. 内容包含大量 \(\LaTeX\) 公式,渲染可能需要一些时间,请耐心等待渲染(约 5s). ...

  7. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  8. Dynamic Programming

    We began our study of algorithmic techniques with greedy algorithms, which in some sense form the mo ...

  9. 算法导论学习-Dynamic Programming

    转载自:http://blog.csdn.net/speedme/article/details/24231197 1. 什么是动态规划 ------------------------------- ...

随机推荐

  1. hdu2929 Bigger Is Better

    题意 给出n根木棍,要你拼一个最大的数,并且这个数是m的倍数. 题解 显然越长的数越大.设\(dp[i][j]\)表示用i根木棍并且\(mod m = j\)的最大长度. 我们很容易想出dp方程,再用 ...

  2. <<< List<HashMap<String, Object>> 及 HashMap<String, Object> 的用法

    //(赋值)最简单的一种hashMap赋值方式 List<HashMap<String, Object>> aMap= new ArrayList<HashMap< ...

  3. HD2222 Keywords Search(AC自动机入门题)

    然而还不是很懂=_= #include <iostream> #include <cstring> #include <algorithm> #include &l ...

  4. Python Day3

    一.set集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 # 创建数值集合 list_1 = ...

  5. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  6. [Head First设计模式]生活中学设计模式——状态模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  7. codevs2645 Spore

    题目描述 Description 某陈和某Y 最近对一个游戏着迷.那是Electronic Arts 今年发布的优秀的模拟经营类游戏,Spore. 在Spore 中,玩家将经历从单细胞生物到星系的统治 ...

  8. C#高级编程笔记 Day 8, 2016年9月 28日 (数组)

    1.数组的初始化 声明了数组后,就必须为数组分配内存,以保存数组的所有元素.数组是引用类型,所以必须给它分配堆上的内存,为此,应使用 new 运算符,指定数组中元素的类型和数量来初始化数组的变量.若使 ...

  9. 安装配置LDAP遇到的问题

    问题1:安装完启动ldap服务报错: ldap: unrecognized service? 原因在于新版的openldap将服务名改为了slapd,使用service slapd start即可启动 ...

  10. MFCC特征提取(C语言版本)

    音频分析中,MFCC参数是经典参数之一.之前对于它的计算流程和原理,大体上是比较清楚的,所以仿真的时候,都是直接调用matlab的voicebox工具或者开发的时候直接调用第三方库.最近想整理一个纯C ...