zoukankan      html  css  js  c++  java
  • 神奇的动态多维开点

    先上干货,这是动态开5维int

    1 int *****f;
    2 f=new int ****[v[1]];
    3     for(int i1=0;i1<=v[1];i1++){  f[i1]=new int ***[v[2]];
    4         for(int i2=0;i2<=v[2];i2++){  f[i1][i2]=new int **[v[3]];
    5             for(int i3=0;i3<=v[3];i3++){  f[i1][i2][i3]=new int *[v[3]];
    6                 for(int i4=0;i4<=v[4];i4++){  f[i1][i2][i3][i4]=new int [v[5]];
    7                     for(int i5=0;i5<=v[5];i5++)  f[i1][i2][i3][i4][i5]=0;
    8     }}}}
    View Code

    更高维的似乎可以用dfs实现?

    现在已经确定应该无法实现,因为new后面的*没法实现自动化……

    看上去没什么卵用,如果知道总状态数不会太多但是各维状态可能会很大的情况下这个东西就非常好用,比如下面这个题↓

    神仙姐姐来到一个美丽的地方,不过美中不足的是那儿有好些秃山……
    由于神仙过于爱美,由不得有半点瑕疵,所以她想用仙力把这些儿秃山通通消灭掉!由于消灭一座山可能要消耗掉一些Hp Or Mp Or Rp……但是有的时候不必考虑那么多,你有可能只需要考虑HP和MP,甚至仅仅考虑HP.(难道是请了哪位俊男来帮忙…….?)

    所有未标明的输入数据,均为longint.且v1*v2……*vm<=100000

    多维背包,但是v1,v2,v3,v4,v5可能会很大,直接开开不下,一种方法是用hash,或者说进制思想把5维压成1维,因为v1*v2……*vm<=100000,所以只需要开一个一维大小为100000的数组即可(实际上为了尽量避免内存溢出基本不会开成100000的)

    但是我弱啊想不出来啊怎么办呐

    就可以使用动态开点,代码就是上面给的内个↑

    然后就可以开心地水过辣

  • 相关阅读:
    sqlite3经常使用命令&amp;语法
    DataTable.AcceptChanges方法有何用处
    C面试题
    keil程序在外部RAM中调试的问题总结(个人的一点经验总结)
    jps命令
    【C++基础】类的组合
    《算法导论》为什么经典
    Spring3.0 AOP 具体解释
    Java中StringBuilder的清空方法比較
    TFS(Team Foundation Server)介绍和入门
  • 原文地址:https://www.cnblogs.com/JSL2018/p/5950876.html
Copyright © 2011-2022 走看看