考虑任意一个数字,任何一个都会有奇怪的。。性质,就是一个可以保证不重复的方案——直接简单粗暴的最高位加数字。。于是,如同上面的那个题:+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. JavaScript随机生成颜色以及十六进制颜色 与RGB颜色值的相互转换

    /** * 随机生成颜色 * @return 随机生成的十六进制颜色 */ function randomColor(){ var colorStr=Math.floor(Math.random()* ...

  2. 抓包工具wireshark的使用--过滤语句

    鲨鱼鳍的图标 抓包很方便

  3. linux下安装redis和部署

    转自简书:https://www.jianshu.com/p/bc84b2b71c1c 1.基础知识  redis是用C语言开发的一个开源的高性能键值对(key-value)数据库.它通过提供多种键值 ...

  4. koa源码分析

    最近项目要使用koa,所以提前学习一下,顺便看了koa框架的源码. 注:源码是koa2.x koa的源码很简洁,关键代码只有4个文件,当然还包括一些依赖npm包 const Koa = require ...

  5. 【Java/Android性能优 7】Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类

    本文转自:http://www.trinea.cn/android/android-common-lib/ 介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存.网络缓存).公共View( ...

  6. dsniff

    /usr/local/sbin/dsniff 这个东西好强大,获取到用户名和密码 bt服务区器上:dsniff -i eth0 -m(自动协议检测) 在另外一个电脑上打开网页,登陆ftp服务器,回头看 ...

  7. 实战:ADFS3.0单点登录系列-前置准备

    本文为本系列第二篇,主要分为两部分进行介绍, 一.网络拓扑 二.证书制作 还是将本系列目录贴出来,方便导航 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:A ...

  8. HDU1195 双向BFS(或BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1195 , 双向BFS或者直接BFS也可以过. 其实这道题只是单向BFS就可以过的,但是为了练算法,所以 ...

  9. ehcache常用API整理

    鉴于csdn的blog的不稳定, 及混乱的编辑器, 和无上传功能, 遂决定彻底投诚javaeye的blog. 数月前整理的一个东西, 作为cache的扫盲文档.参考了它的官方文档. 对ehcache感 ...

  10. 【洛谷1120】小木棍(一道有技巧的dfs)

    点此看题面 大致题意: 给你\(N\)根小木棍,请你把它们拼成若干根长度相同的木棍,问你最小可能长度. 枚举+\(dfs\) 显然的,木棍的长度肯定是\(\sum_{i=1}^n len[i]\)的一 ...