考虑任意一个数字,任何一个都会有奇怪的。。性质,就是一个可以保证不重复的方案——直接简单粗暴的最高位加数字。。于是,如同上面的那个题:+1、-1、0

但是考虑到65536KB的标准内存限制,会得出一个奇怪的性质,那就是。。。这题可以先大表之后对内存做奇怪的优化——前十位开小一点,后十位开大一点。之前计算时间复杂度的时候是1e6*20这种按照全部数组空间扫一发的方式进行计算,但是后面发现,这种方式其实是没必要,观察可以发现,实际上这道题不论怎么做奇怪的计算都是实质上的——也就是穷举SUM(2^k)。于是。。。。。。全部复杂度大概就被强行限制到了1e6的规模。之后进行任意一种方式查询即可。。。。查询复杂度是O(1)

但是最开始的时候踩了个坑——对于数字X应该怎么做才能够将他给他多加一位还能够保证不重复呢?或者说应该把新的数字加到哪里呢?最开始想到的是末尾,但是看上去末尾不够好。。。于是考虑往中间加,但是明显的限制是——排列组合的个数无论如何都不可能、也不能够,比3^N更多。于是。。。我们可以考虑愉快的吧新的位数加到想象中的二进制串串的最最前面。并且这种做法的直接好处是,可以“制度性的保证不出现重复”。。

这题当时在做的时候打了好长好长的表,试图进行相关对比。。然而。。。。有向无环图的动态规划问题。。。

当然题目中自带的坑差点把我误导了——他给的查询数字异常的大,之前以为实际达到的数字也是那么大来着。。。但是很显然不是,因为最大值的限制是2^N这个尺寸的限制。
于是在这个问题的处理上需要对最大值情况进行特殊判断。

AC代码:

#include<iostream>
#include<math.h>
using namespace std; long long dic[];
int dp1[][];
int dp[][]; void init()
{
long long kk=;
for(int i=;i<;++i)
{
dic[i]=kk;
kk*=;
}dp1[][]=; // cout<<dic[20]<<endl;
for(int i=;i<;++i)
{
for(int j=;j<dic[i];++j)
{
int val=j;
dp1[val+dic[i]][i+]+=dp1[j][i];
dp1[val][i+]+=dp1[j][i];
dp1[abs(val-dic[i])][i+]+=dp1[j][i]; }
} for(int j=;j<=dic[];++j)
{
dp[j][]=dp1[j][];
}
for(int i=;i<;++i)
{
// cout<<dic[i]<<endl;
for(int j=;j<dic[i];++j)
{
int val=j;
dp[val+dic[i]][i+-]+=dp[j][i-];
dp[val][i+-]+=dp[j][i-];
dp[abs(val-dic[i])][i+-]+=dp[j][i-]; }
}
} int main()
{
cin.sync_with_stdio(false);
// freopen("indata.in","r",stdin);
// freopen("out.txt","w",stdout);
// cout<<pow(2,20)<<endl;
init();
int t;
cin>>t;//cout<<t<<endl;
while(t--)
{
long long a,b;
cin>>a>>b;
if(b<)
{
if(a==)
{
cout<<<<endl;
continue;
}
if(abs(a)>=dic[b])cout<<<<endl;
else cout<<dp1[abs(a)][b]/<<endl;
}else
{
if(a==)
{
cout<<<<endl;
continue;
}
if(abs(a)>=dic[b])cout<<<<endl;
else cout<<dp[abs(a)][b-]/<<endl;
}
}
return ;
}

数据生成器:

#include<bits/stdc++.h>
using namespace std;
int aa=;
int main()
{
freopen("indata.in","w",stdout); long long bb=-pow(,aa)+;
cout<<(long long)pow(,aa+)-<<endl;
while(bb<pow(,aa))cout<<bb++<<" "<<aa<<endl; }

检查的代码:

#include<bits/stdc++.h>
using namespace std; long long aa[];
void init()
{
long long k=;
for(int i=;i<;++i)
{
aa[i]=k;
k*=;
}
} int main()
{
init();
freopen("out.txt","r",stdin);
long long a,summ=;
while(cin>>a)summ+=a;
cout<<summ<<endl;
cout<<aa[lower_bound(aa,aa+,summ)-aa];
}

HOJ 13845 Atomic Computer有向无环图的动态规划的更多相关文章

  1. UVA_1025 a Spy in the Metro 有向无环图的动态规划问题

    应当认为,有向无环图上的动态规划问题是动态规划的基本模型之一,对于某个模型,如果可以转换为某一有向无环图的最长.最短路径问题,则可以套用动态规划若干方法解决. 原题参见刘汝佳紫薯267页. 在这个题目 ...

  2. 有向无环图的应用—AOV网 和 拓扑排序

    有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...

  3. JavaScript + SVG实现Web前端WorkFlow工作流DAG有向无环图

    一.效果图展示及说明 (图一) (图二) 附注说明: 1. 图例都是DAG有向无环图的展现效果.两张图的区别为第二张图包含了多个分段关系.放置展示图片效果主要是为了说明该例子支持多段关系的展现(当前也 ...

  4. 湖南省第十二届大学生计算机程序设计竞赛 B 有向无环图 拓扑DP

    1804: 有向无环图 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 187  Solved: 80[Submit][Status][Web Board ...

  5. javascript实现有向无环图中任意两点最短路径的dijistra算法

    有向无环图 一个无环的有向图称做有向无环图(directed acycline praph).简称DAG 图.DAG 图是一类较有向树更一般的特殊有向图, dijistra算法 摘自 http://w ...

  6. select 函数实现 三种拓扑结构 n个客户端的异步通信 (完全图+线性链表+无环图)

    一.这里只介绍简单的三个客户端异步通信(完全图拓扑结构) //建立管道 mkfifo open顺序: cl1 读 , cl2 cl3 向 cl1写 cl2 读 , cl1 cl3 向 cl2写 cl3 ...

  7. 【拓扑】【宽搜】CSU 1084 有向无环图 (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 题目大意: 一个有向无环图(DAG),有N个点M条有向边(N,M<=105 ...

  8. 算法精解:DAG有向无环图

    DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...

  9. c/c++ 有向无环图 directed acycline graph

    c/c++ 有向无环图 directed acycline graph 概念: 图中点与点之间的线是有方向的,图中不存在环.用邻接表的方式,实现的图. 名词: 顶点的入度:到这个顶点的线的数量. 顶点 ...

随机推荐

  1. java与模式读后总结

    一 老规则边看边写书上的代码,磨磨蹭蹭三个多星期终于把一本1000+的java与模式看完了. 于是,在这里贴上自己对每个模式的思考和总结,其实这个东西在我边看边写的时候已经写了一大半,博文再写一次算是 ...

  2. 查看Apache信息以用户htdoc位置

    查看Apache的相关信息:httpd -V 再从基本信息中取得DocumentRoot位置 less /etc/httpd/httpd.conf中查找DocumentRoot,即有静态文件存放的位置 ...

  3. wcf问题集锦

    1.处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供 ...

  4. SpringBoot2.0之三 优雅整合Spring Data JPA

      在我们的实际开发的过程中,无论多复杂的业务逻辑到达持久层都回归到了"增删改查"的基本操作,可能会存在关联多张表的复杂sql,但是对于单表的"增删改查"也是不 ...

  5. iOS开发ReactiveCocoa学习笔记(六)

    RAC操作方法三. demo地址:https://github.com/SummerHH/ReactiveCocoa.git doNext deliverOn timeout interval del ...

  6. Android 使用GreenDao 添加字段,删除表,新增表操作

    GreenDao 给我个人感觉 比一般的ORM框架要好很多,虽然说上手和其他的比起来,较复杂,但是如果使用熟练以后,你会爱上这个框架的 用这些ORM 框架给我的感觉都是,当升级时,都需要进行数据库所有 ...

  7. Linux命令行环境与桌面环境护切换

    1.前言 在大部分情况下,我们在使用Linux时习惯使用命令行环境,但是有时候也还是会使用到安装桌面环境,所以在这里介绍一下如何给没有安装桌面环境的系统安装桌面环境.以Centos 6.5 为例演示一 ...

  8. meterpreter > screenshot

    meterpreter > screenshotScreenshot saved to: /opt/metasploit/msf3/wLafQYhx.jpegmeterpreter > / ...

  9. Visual Studio 2017 如何打开Model Browser(实体数据模型浏览器)

    写一个笔记,记录下在Visual Studio 2017中打开EF模型浏览器的步骤和方法,方便以后忘记了可以重新查阅.主要是现在VS功能越来越多,很多功能模块/界面要开启都是有先决条件,总之隐藏的很深 ...

  10. .NET中异常类(Exception)

    异常:程序在运行期间发生的错误.异常对象就是封装这些错误的对象. try{}catch{}是非常重要的,捕获try程序块中所有发生的异常,如果没有捕获异常的话,程序运行的线程将会挂掉,更严重的是这些错 ...