菜鸡蜕变从今天开始。昨天成哥在群里发了道题,佳哥说用区间dp做。我先尝试暴力。=================  暴力时间太长 达到规定的10^9数量级辅助程序消耗30分钟,且输出文件不知名损坏(??!!)  区间dp     区间动态规划问题一般是考虑,对于每段区间,他们的最优值都是由几段更小的区间的最优值得到,是分治思想的一种应用,讲一个区间   的问题不断划分为更小的区间直至一个元素组成的区间,枚举他们的组合,求合并后的最优值。----来自csdn某博主。     设F[i,j](1<=i<=j<=n)表示区间[i,j]内的数字相加的最小代价       F[i,i]=0(一个数字无法合并,so 代价为0)       每次用变量k(i<=k<=j-1)将区间分为[i,j],[k+1,j]两段for (l=1;l<=n;l++)//l是区间长度,作为阶段(阶段是个什么玩意儿??!!)for (i=1;i<=n;i++)//i是枚举的区间起点{j=i+l-1;if (j>n) break;//划重点!!不要漏写for (k=i,k<=j-1;k++)F[i,j]=max{f[i,k],f[k+1,j]+w[i,j]};//状态转移方程}???!!讲完了1+1 那我现在就去算积分咯??!!蛇皮操作好 我复述一遍昨天的题//不然现在无话可说岂不是很尴尬    找出回文数    输入输出要求  第一行输入一个整数t(t<20),表示一共t组数据;第二行一个整数n 表示询问n个区间;n<10^6;接下来n行,每行两个整数,l,r表示区间起点终点;l<r<10^9对于每组每个区间 输出区间内的回文整数个数哈哈哈哈或  我晓得咯 //终于明白大佬的思路  首先初始化一个f数组 f[i]表示1—10^(i-1)里回文数的个数//写另一个程序找出这些数据。  那么一个数如abcd  1—abcd的回文数为f(3)+(大于1000)的大于1000部分   将abcd分为ab,cd两部分,显然在1—ab-1这个区间的数都能有回文数,      而ab这个数能否构成回文数就看(cd>ba)是否成立,注意是ba!!      若为abcde类型 则判断cde>cba      设pali[i]表示1—i内回文数个数,那么pali[i]=f[i位数-1]+(前一半构成的数-10^位数/2-1)+判断(是否加一)//即pali[1238]=f[3]+(12-10)+((38>21)?1:0);最终a~b内则为pali[b]-pali[a-1];----------来自csdn某博主  写代码写代码。  第一段代码采用先倒着存,然后写一个rev函数将其倒回来。  这样就存在一个问题,比如若一个数为1031,倒着存,q1=1,h=13;调用rev函数时,q=rev(q1)==1,而本身q应该=10;  看了大佬代码后明白 可以采用这样的方法将l记为位数,w记为位数/2;定义变量t为10^w;//一个循环搞定那么q=n/t;h=n%t;//若l为奇数则t*10  t/10一次操作就行。这样q1再调用rev函数就不会出现少掉0的情况;

话不多说 贴代码。

#include<iostream>
using namespace  std;
const long f[12]={0,9,18,108,198,1098,1998,10998,19998,109998,199998,1099998};
int rev(int n)
{int k=0;while (n){k=k*10+n%10;n/=10;}return k;
}
int ws(int n)
{int k=0;while(n){k++;n/=10;}return k;
}
long dp(int n)
{int i,j,q=0,h=0,l,q1=0,ans;//q1反存前面的数,q正存前面的数,h正存后面的数 int k=n;if (n<10) return n;int m=ws(k)>>1;//位数/2 l=ws(k);//位数int t=1;for (i=1;i<=m;i++)t*=10;ans=f[l-1];if (l%2==0){q=k/t;h=k%t;t/=10;ans+=q-t;q1=0;while(q){q1=q1*10+q%10;q/=10;}}else{q=k/t;t*=10;h=k%t;ans+=q-t/10;q1=0;while(q){q1=q1*10+q%10;q/=10;}}if (h>=q1) ans++;return ans;
}
//  if (l%2==0)
//  {
//      while(k)
//      {
//          if (m)
//          {
//              h=h*10+k%10;
//              m--;
//          }
//          else
//          {
//            q1=q1*10+k%10;
//            m--;
//        }
//          k/=10;
//      }
//  }
//  else
//  {
//      m++;
//      while(k)
//      {
//          if(m>1)
//          {
//            h=h*10+k%10;
//            m--;continue;
//          }
//          else if(m==1)
//          {
//              h=h*10+k%10;
//              q1=q1*10+k%10;
//              m--;
//          }
//          else
//          {
//              q1=q1*10+k%10;
//          }
//          k/=10;
//
//      }
//  }
//  q=rev(q1);
//  h=rev(h);
//  cout<<q<<" "<<q1<<" "<<h<<endl;
//  return ((f[l-1]+q-1)+((h>=q1)?1:0));
//}
int main()
{int t,i,j,k,p,l,r,n,x;cin>>n;while(n--){
//      cin>>x;
//      cout<<dp(x)<<endl;cin>>l>>r;cout<<dp(r)-dp(l-1)<<endl;}} 

题外话:
还get了一个新方法判断回文数 无须转化为字符数组
思路:
若一个数为回文数,则其倒过来依然为原来的数;

设计算法实现将一个数倒过来:

         for (int m=n;m>0;m/=10){t=t*10+m%10;k+=m%10;}if (t==n) return true;

按数位计算 时间很少!注意赋初始值

相对于之前的暴力(小数据用了字符数组判断的方法,杀鸡用牛刀,不宜不宜)可能要近半个小时 这个算法相同数量级只需不到一分钟,也算进步了。
小数据时用这个  数字大(10^100)或者是字符串是就还是用字符数组判断;
不过上述题目最终还是得回到区间dp上,继续。

一个16号的题 拖到了17号,哈哈顺便祝自己生日快乐。

=======================

记录自己的学习生活,排版哈哈,若有幸被大佬看见,见谅见谅,有问题欢迎指正

20171216区间dp(有错请各位大佬指正)相关推荐

  1. 暑假集训总结——区间DP,堆的概念及应用,STL(vector、set、pair、map、priority_queue),hash表,树状数组,图论

    序言: 经过长达十几天的集训,确实学了不少知识点.我想如果再不总结的话,6天之后又要忘完了. 所以发一篇具有总结回忆性的博客,供大家回忆. 目录会本人自己排列的时间的先后顺序来排列,可直接食用. 目录 ...

  2. nyoj 304 节能 【区间dp】

    点击打开链接 节能 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 Dr.Kong设计的机器人卡多越来越聪明.最近市政公司交给卡多一项任务,每天早晨5:00开始,它负责关 ...

  3. 【区间DP+高精】codevs1166 矩阵取数游戏题解

    转自: [ametake版权所有]http://blog.csdn.net/ametake欢迎来看 http://blog.csdn.net/ametake/article/details/47664 ...

  4. 【日常学习】【区间DP+高精】codevs1166 矩阵取数游戏题解

    题目来自NOIP2007TG3 如果在考场上我现在已经歇菜了吧 今天一整天的时间全部投在这道题上,收获不小. 先上题目 题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏 ...

  5. 0x53. 动态规划 - 区间DP(习题详解 × 8)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...

  6. 【每日DP】day13、P3147 [USACO16OPEN]262144 (区间DP,2048游戏)难度⭐⭐⭐★

    P3147 [USACO16OPEN]262144 P 想到合并,自然就想到区间dp,一个被合成的数之前是一个区间,并且由两个数比它小 111 的区间合成.可麻烦的是,我们并不知道之前的两个区间长度各 ...

  7. 动态规划——区间dp

    在利用动态规划解决的一些实际问题当中,一类是基于区间上进行的,总的来说,这种区间dp是属于线性dp的一种.但是我们为了更好的分类,这里仍将其单独拿出进行分析讨论. 让我们结合一个题目开始对区间dp的探 ...

  8. Leetcode1690. 石子游戏 VII[C++题解]:带有博弈论的区间dp

    文章目录 题目分析 状态表示 状态转移 题目链接 题目分析 补充博弈论的做题想法:让最坏情况下最好.在很多决策中,考虑所有的最坏情况,选其中最好的一个. 本题分析: 刚开始因为是个贪心题目,两个人每次 ...

  9. bzoj1055 [HAOI2008]玩具取名 区间DP

    问题描述 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用"WING"中任意两个字母 ...

最新文章

  1. java c++的区别_Java语言与C、C++之间的区别?
  2. 去掉中文语言下 wget下载提示 英国中部时间 的问题
  3. OSG+VS2010+win7环境搭建---OsgEarth编译
  4. 环境变量PATH 、mv 命令 、cp 命令和 查看文档相关的命令
  5. python方向键键值_Python实现的字典排序操作示例【按键名key与键值value排序】
  6. 李洪超 硬件工程师_西安职位|各类工程师,软件开发等多岗位招募,轻松月入过万,全程视频面试...
  7. centos7安装kubernetes1.9集群
  8. 文字过多以省略号代替,放在文字上会显示title信息提示
  9. O2O年度反思:流量不再为王不赚钱就得死
  10. 我对ThreadLocal的一些理解 内存泄露啥的
  11. 数据结构与算法的分析 —— 平均时间复杂度 vs 分摊时间复杂度
  12. 浅谈工业级物联网项目架构设计及实施
  13. npm 安装vue脚手架报错警告npm WARN deprecated
  14. python tox
  15. 从OPPO Finder看手机产品的差异化体现
  16. 核心项目:高并发秒杀系统(项目介绍,项目搭建,数据库,DAO)
  17. 17 Flask mega-tutorial 第17章 在Linux上部署(腾讯云 Ubuntu)【极其详细的部署过程】
  18. python--正则表达式匹配密码
  19. Bat脚本编写以及cmd命令
  20. 解决禅道(ZenTao)Mysql启动不了的问题

热门文章

  1. 手工检测SQL注入漏洞
  2. 【干货来袭】arm程序汇编指令总结,让你更高效的学习!
  3. 关于ARM的一些笔记
  4. matlab用牛顿迭代法求解方程,牛顿迭代法求方程解 程序如下
  5. 文献笔记:《Can we still avoid automatic face detection?》读后感~
  6. 7.3 写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。
  7. 方舟进官方服务器弹网页,进方舟服务器就弹白框
  8. 量子计算机是伪科学,别再被伪科学“量子产品”蒙蔽了
  9. java请求传参方式的总结
  10. AutoSAR系列讲解(实践篇)9.4-通信相关机制(下)