Liny_@NotePad

沉迷ACG中

限界与剪枝求解0/1背包问题

一、 算法思想描述

首先对物体按照价值重量比进行排序。
再从第一个物体开始,对每个物体分两种状态求解:放入与不放入。
在每次求解时都计算该状态可能达到的最优价值,并放入大顶堆中。
当两种状态都求解完后从堆中取出堆顶元素,从该元素所代表的状态中继续进行分支计算。直到深度达到n,问题得到解。

ajax请求时读缓存的问题

当url一样时ajax就会读取缓存中的值 真囧。

百度说,在url中加上一个随机值即可。试了一下用时间,果然OK~

$.getJSON("ManageClazz!getFreeRoomList.action?startdate=" + startdate + "&datetime=" + (new Date()).getTime(), null, function(data){
                       alert(data);
});

还有数学的Math.random()也可以产生随机数……

【备忘】Hibernate生成的model比较Integer要记得用equals啊……

rt

java.lang.String.split()中的|

实验split("|")失效,
百度发现有如下:

关于点的问题是用 string.split("[.]") 解决。
关于竖线的问题用 string.split("\\|")解决。
关于星号的问题用 string.split("\\*")解决。
关于斜线的问题用 string.split("\\\\")解决。
关于中括号的问题用 string.split("\\[\\]")解决。

EXT.Window大小随机变化问题解决

晚上突然各个窗体打开大小不正常,最后发现是早上刚加上的stateManager的关系,
窗体读取缓存中的大小显示,囧。

最后百度到解决方案,
定义它的stateful属性为false即不被stateManager管理~

EXT 状态保存

在EXT.onReady中设置

Ext.state.Manager.setProvider(new Ext.state.CookieProvider());

不知道是啥 也许是监听器的意思吧 = =
CookieProvider表示它是根据Cookies有效期限保存的么???

然后在你的类里加上

this.stateEvents = ['tabchange']
this.getState = function() {return{tab:this.getActiveTab().id}}
this.applyState = function(state) {this.setActiveTab(state.tab);}

stateEvents表示状态事件(数组)。
这里只用了一个切换tab的。
getState方法中可以写切换tab时执行的内容,比如保存……这里没有写。
applyState貌似可以隐式调用 就不测试了

详细请搜索下EXT 状态保存。

JavaScript 页面打印和预览

1. 页面打印

window.print()

2. 页面局部打印
在之前的基础上,加上

<style type="text/css" media=print>
.noprint{display : none }
</style>

定义,表示class为noprint的代码在打印将不被显示。
之后将不需要打印的内容放入class为print的容器中即可。

3. 通过IE组件 WebBrowser 实现打印
首先获得控件

<object ID='WebBrowser' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>

之后调用相应功能:

WebBrowser1.ExecWB(6,1);  // 打印
WebBrowser1.ExecWB(7,1);  // 打印预览
WebBrowser1.ExecWB(8,1);  // 打印设置

其他百度来的

WebBrowser.ExecWB(1,1) 打开
Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口
Web.ExecWB(4,1) 保存网页
Web.ExecWB(6,1) 打印
Web.ExecWB(7,1) 打印预览
Web.ExecWB(8,1) 打印页面设置
Web.ExecWB(10,1) 查看页面属性
Web.ExecWB(15,1) 好像是撤销,有待确认
Web.ExecWB(17,1) 全选
Web.ExecWB(22,1) 刷新
Web.ExecWB(45,1) 关闭窗体无提示

 不打印的方法同2。

4. 还是JS,这次是选中部分打印。
百度来的:

function preview(oper) {
      if (oper < 10){
          bdhtml=window.document.body.innerHTML;//获取当前页的html代码
            sprnstr="<!--startprint"+oper+"-->";//设置打印开始区域
            eprnstr="<!--endprint"+oper+"-->";//设置打印结束区域
            prnhtml=bdhtml.substring(bdhtml.indexOf(sprnstr)+18); //从开始代码向后取html

            prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));//从结束代码向前取html
            window.document.body.innerHTML=prnhtml;
            window.print();
            window.document.body.innerHTML=bdhtml;
      } else {
            window.print();
      }
}

而要打印的内容放在<!--startprint1-->和<!--endprint1-->之间即可。调用preview(1),
这样可以设定多个部分打印不同内容,oper值自己根据需要指定。

Hibernate的set排序

在对应的hbm.xml文件中所需要修改的set标签加上order-by属性即可~
eg.

<set name="courses" inverse="true" order-by="weekday asc, period asc, roomId asc">
    <key>
       <column name="classID" not-null="true" unique="true" />
    </key>
    <one-to-many class="org.banana.mms.model.Course" />
</set>

当然,order-by里用的是中间表的字段~