HOJ 13845 Atomic Computer有向无环图的动态规划
考虑任意一个数字,任何一个都会有奇怪的。。性质,就是一个可以保证不重复的方案——直接简单粗暴的最高位加数字。。于是,如同上面的那个题:+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有向无环图的动态规划的更多相关文章
- UVA_1025 a Spy in the Metro 有向无环图的动态规划问题
应当认为,有向无环图上的动态规划问题是动态规划的基本模型之一,对于某个模型,如果可以转换为某一有向无环图的最长.最短路径问题,则可以套用动态规划若干方法解决. 原题参见刘汝佳紫薯267页. 在这个题目 ...
- 有向无环图的应用—AOV网 和 拓扑排序
有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...
- JavaScript + SVG实现Web前端WorkFlow工作流DAG有向无环图
一.效果图展示及说明 (图一) (图二) 附注说明: 1. 图例都是DAG有向无环图的展现效果.两张图的区别为第二张图包含了多个分段关系.放置展示图片效果主要是为了说明该例子支持多段关系的展现(当前也 ...
- 湖南省第十二届大学生计算机程序设计竞赛 B 有向无环图 拓扑DP
1804: 有向无环图 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 187 Solved: 80[Submit][Status][Web Board ...
- javascript实现有向无环图中任意两点最短路径的dijistra算法
有向无环图 一个无环的有向图称做有向无环图(directed acycline praph).简称DAG 图.DAG 图是一类较有向树更一般的特殊有向图, dijistra算法 摘自 http://w ...
- select 函数实现 三种拓扑结构 n个客户端的异步通信 (完全图+线性链表+无环图)
一.这里只介绍简单的三个客户端异步通信(完全图拓扑结构) //建立管道 mkfifo open顺序: cl1 读 , cl2 cl3 向 cl1写 cl2 读 , cl1 cl3 向 cl2写 cl3 ...
- 【拓扑】【宽搜】CSU 1084 有向无环图 (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 题目大意: 一个有向无环图(DAG),有N个点M条有向边(N,M<=105 ...
- 算法精解:DAG有向无环图
DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...
- c/c++ 有向无环图 directed acycline graph
c/c++ 有向无环图 directed acycline graph 概念: 图中点与点之间的线是有方向的,图中不存在环.用邻接表的方式,实现的图. 名词: 顶点的入度:到这个顶点的线的数量. 顶点 ...
随机推荐
- mybatis + log4j2 问题 java.lang.NoClassDefFoundError: org/apache/logging/log4j/spi/AbstractLoggerWrapper
root cause java.lang.NoClassDefFoundError: org/apache/logging/log4j/spi/AbstractLoggerWrapper 网上资料比较 ...
- 在Controller方法执行之前进行捕获请求,进行类型的转换
@ExceptionHandler(TypeMismatchException.class) public ModelAndView ParseException(Excetion ex,HttpSe ...
- SQL语句创建数据库以及一些查询练习
--创建 MyCompany数据库 use master execute sp_configure 'show advanced options',1 --开启权限 reconfigure execu ...
- 自定义HashMap的键
用自定义的类型作为HashMap的key,必须同时重载hashCode()和equals(),才可以实现在HashMap中的查找自定义键. 例如自定义Point类: public class Poin ...
- Laravel事件监听器listener与事件订阅者Subscriber的区别
其实就一句话: Each event can have multiple listeners, but a listener can't listen to more than a single ev ...
- bootstrap Table 服务端处理分页 后台是.net
要考虑函数可被可重复使用(调用),需要将可变化的变为参数封装起来 function HQCreatTables(ob) { var option = { method: 'get', dataType ...
- mockJs语法糖用例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- (已解决)Arduino mega2560 R3插在电脑上没有反应
OK,话不多说.网上找了一些资料,感觉都说的不够清晰.自己琢磨了下,有了一个简单粗暴的方法. 步骤1:插上Arduino mega2560板子.没有反应. 步骤2:我的电脑-管理-设备管 ...
- 【Linux/Ubuntu学习 10】unbuntu 下 eclipse 中文乱码的解决
wangdd@wdd-pc:~$ gedit /var/lib/locales/supported.d/local 添加: zh_CN.GBK GBK zh_CN.GB2312 GB2312 终端执行 ...
- python 之Requests库学习笔记
1. Requests库安装 Windows平台安装说明: 直接以管理员身份打开cmd运行界面,使用pip管理工具进行requests库的安装. 具体安装命令如下: >pip instal ...