考虑任意一个数字,任何一个都会有奇怪的。。性质,就是一个可以保证不重复的方案——直接简单粗暴的最高位加数字。。于是,如同上面的那个题:+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. jmeter压测配置

    windows上面修改最大使用端口数和time_await等待时间 注册表需要添加两个配置,位置:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ S ...

  2. 7天学完Java基础之2/7

    面向对象 面向对象的思想就是值我们要实现一个共功能的时候,我们不自己去做,而是找别人帮我们去做,帮我们去做的这个人就是对象.面向对象强调的是谁来帮我实现这个功能. 类与对象的关系 类:是一组相关属性和 ...

  3. JavaSE_5_线程

    1.多线程中的i++线程安全吗?为什么? 不安全,因为每个线程都有自己的工作内存,每个线程需要对共享变量操作时必须把共享变量从主内存中加载到自己的工作内存,等完成操作后再保存到内存中,如果一个线程运算 ...

  4. JavaSE_2_关键字

    1.介绍一下Syncronized锁,如果用这个关键字修饰一个静态方法,锁住了什么?如果修饰成员方法,锁住了什么? synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下四种: ...

  5. zabbix中监控项报错

    报错信息: zabbix报错(Not all processes could be identified, non-owned process info will not be shown, you ...

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

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

  7. mybat-大文件的存取

    在mybatis中存储大文件可以直接存 取的时候取出来的是二进制 1.在实体类中添加大文本和图片 package com.java1234.model; public class Student { ...

  8. UOJ#210. 【UER #6】寻找罪犯 2-sat

    #210. [UER #6]寻找罪犯 链接:http://uoj.ac/problem/210 想法:2-sat模型.每个人拆点,分别表示为犯人.非犯人.每个句供词拆点,分别表示真话.假话.供词与对应 ...

  9. log4j 配置文件 (XML/.properties)

    xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configurat ...

  10. World Wind Java开发之十二——加载粗制三维模型(ExtrudedPolygon)(转)

    ww可以根据DLG图批量生成假三维模型,这对于小区等特征相似的建筑物模型的构建是非常有用的.下面来看如何一步步实现假三维模型的加载: 1.Shp文件的制作 首先在arcmap下数字化几个建筑物,并新建 ...