- Electron+Python软件系统开发记录(一):基础环境搭建
多宝鱼1998
环境配置遇到的坑pythonnodejsthrift
Electron+Python软件系统开发记录(一):基础环境搭建1.问题说明最近开始做本科毕设,其中有一部分内容是搭建一个完整的软件系统。系统要求就是常见的客户端,服务器,数据库的整体架构。因为本科不是计算机系的,所以学习的相关技能少,以前写课程设计一般用QT或者MFC,还有Mac的OC语言。本着多学习的态度,这次选用了Electron框架,可以迫使自己学学html,css,js这些东西。后端因
- 文件上传复现
爱瓒可抵漫长岁月
网络
1.源码$is_upload=false;$msg=null;if(isset($_POST['submit'])){$ext_arr=array('jpg','png','gif');$file_name=$_FILES['upload_file']['name'];$temp_file=$_FILES['upload_file']['tmp_name'];$file_ext=substr($f
- 用C++代码利用std::filesystem库写入一个文件路径到数据库中
新兴AI民工
C++编程实战大杂烩c++数据库filesystem转移字符处理
使用C++代码写数据库不是什么麻烦事,但是和成熟的JAVA体系不一样,C++没有那么多成熟的数据库操作,比如mybatis等等。而且C++一般来说也不会用于写业务软件,不会用比较重的三方库。所以有时用C++代码来直接操作数据库,碰到的一个问题是:在一张数据库表中定义了一个字段:filePathvarchar2(100)需求是将一个形如:c:\test\test.log这样的文件名写入到该字段。本来
- 鸿蒙ZRouter动态路由框架—服务路由
H.ZWei
HarmonyOS应用开发鸿蒙HarmonyosNavigationrouter
前言源码:https://gitee.com/common-apps/ZRouterOH:https://ohpm.openharmony.cn/#/cn/detail/@hzw%2Fzrouter服务路由主要用于实现模块之间的通信,模块间是相互独立且不直接依赖于彼此。首先确保路由插件在1.0.9版本及以上一、添加配置1、在entry模块的build-profile.json5文件的buildOp
- java 判断byte[ ]数组是否为空
张彡543
java开发语言
1.使用数组长度进行判断publicstaticbooleanisNullOrEmpty(byte[]array){returnarray==null||array.length==0;}2.使用Arrays工具类进行判断:importjava.util.Arrays;publicstaticbooleanisNullOrEmpty(byte[]array){returnarray==null||
- 【Mac 系统卸载 Go 语言完整指南】
qq_837287396
macosgolang开发语言
Mac系统卸载Go语言完整指南1.删除Go安装目录#定位安装路径whichgo#默认路径为`/usr/local/go`#删除安装目录sudorm-rf/usr/local/go#删除系统路径配置(通过.pkg安装时需执行)sudorm-rf/etc/paths.d/go2.清理环境变量#编辑Shell配置文件(如~/.zshrc或~/.bash_profile)#删除以下内容:expor
- mac M1 安装flutter
小泥人(倪)
macosflutter
M1安装Flutter1-官网下载flutterSDK盘符自己记好https://docs.flutter.dev/release/archive?tab=macos2-控制台配置环境变量open.zshrc/bash_profile//平常在哪配就打开哪个文件3-复制粘贴exportPATH="$PATH:/Users/xnr/Documents/flutter/bin:$PATH"//自己安装
- 【Git】推送,拉取远程仓库
熙曦Sakura
Gitgit
向远程仓库推送本地已经clone成功远程仓库后,我们便可以向仓库中提交内容,例如新增一个file.txt文件:#新建文件$lsREADME.en.mdREADME.md$vimfile.txt$catfile.txthellogit#提交文件$gitadd.$gitcommit-m"createfile.txt"[master7ce3183]createfile.txt1filechanged,1
- 【MySQL】表的约束
熙曦Sakura
MySQLmysqlandroidoracle
5.表的约束真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。表的约束很多,这里主要介绍如下几个:null/notnull,default,comment,zerofill,primarykey,auto_increment,uniquekey。5.1空属性两个值:null(默认
- 打卡代码随想录第17天:LeetCode654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
jingjingjing1111
leetcode
学习资料:代码随想录文中含LLM生成内容,不一定对654.最大二叉树力扣题目地址思路:不断寻找该部分的最大值去切割数组,不断递归,到在左闭右开区间不成立时,返回空节点。/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(null
- Vue3中使用exceljs和file-saver实现Excel导出(含图片导出)完整方案
叫我OldFe
excel
问题背景在Vue3项目中,当我们需要将包含图片的数据导出到Excel时,常用的sheetjs/xlsx库存在局限性:无法直接导出图片到单元格。本文将提供完整的解决方案,封装可直接复用的工具函数。解决方案技术选型使用exceljs+file-saver组合:exceljs:支持图片插入的Excel操作库file-saver:前端文件保存工具功能特性✅支持多图片列导出✅自动识别Base64和DataU
- 4种方法用Python批量实现多Excel多Sheet合并_excel表格自动合成python
2401_84010702
程序员pythonexcel开发语言
importpandasaspd #读取Excel文件 file_list=['file1.xlsx','file2.xlsx'] dfs=[pd.read_excel(file)forfileinfile_list] #合并多个工作表 result=pd.concat(dfs,ignore_index=True) #保存到新的Excel文件 result.to_excel('merg
- android读取存储文件路径,安卓获取存储文件路径
大白话时事
android读取存储文件路径
首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己的应用的内部存储路径下。所有内部存储中保存的文件在用户卸载应用的时候会被删除。一、files1.Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象。2.Context.openFileInput()与Context.o
- android的缓存地址,android缓存与临时文件
AIWorldLabs
android的缓存地址
应用程序程序在第一次打开的时候,我们会把一些常用的数据保存到本地;或者应用程序在运行的时候,需要保存一些记录的(比如记事本),因为耗子的工作需要保存填写的一些表单在本地,所以就整理了一下如何简单的把数据保存到本地。我们主要用到的方法就是下面这四个方法,看名字就可以看出来。getExternalCacheDir()getExternalFilesDir()getCacheDir()getFilesD
- android读写缓存文件路径,获取Android应用专属缓存存储目录的实例
落霜枫舞
android读写缓存文件路径
如果你想摆脱缓存目录使用的尴尬:找不到目录?忘记申请读写权限?害怕污染用户存储空间?……请往下看SD卡缓存目录当应用需要将图片或者文件缓存到SD卡中时要去申请创建目录,有下面几种途径我们可以通过API调用应用专属目录:///storage/emulated/0/Android/data/app_package_name/files/PicturesContent.getExternalFilesD
- 【android文件存放路径】
tangsilian
androidandroid
Android开发:filePath放在哪个文件夹Environment.getDataDirectory()=/dataEnvironment.getDownloadCacheDirectory()=/cacheEnvironment.getExternalStorageDirectory()=/mnt/sdcardEnvironment.getExternalStoragePublicDire
- 使用expect工具实现远程批量修改服务器密码
hanruiding
服务器github运维
使用expect工具实现远程批量修改服务器密码linux服务器安装Expect工具1、首先查看系统中是否有安装expect。#whereisexpect2、Expect工具是依赖tcl的,需要先安装tcl#wgethttps://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz#tarzxvftcl8.4.19-s
- Android 动态分区详解(四) OTA 中对动态分区的处理
洛奇看世界
Android动态分区Android虚拟A/B分区android动态分区
文章目录0.导读1.payload中的动态分区数据2.制作动态分区升级包2.1制作升级包2.2`dynamic_partition_info_file`参数2.3`dynamic_partitions_info.txt`文件2.4总结3.打包动态分区数据3.1解析动态分区数据3.2输出动态分区数据3.3动态分区数据打包流程4.解包并更新动态分区数据4.1设备处理接收到的Manifest数据4.2更
- Android 中临时文件存放路径选择
casual_clover
新起点android
在Android中,下载临时文件通常可以放在以下目录中,具体选择取决于应用的需求和目标Android版本的限制:1.通用临时目录(/data/local/tmp/)这是Android系统提供的一个通用临时目录,适用于存储临时文件。特点:无需特殊权限:应用通常可以直接访问此目录,无需请求存储权限。适合临时文件:文件在设备重启后可能会被清理,适合存储临时数据。valtempFilePath="/dat
- 力扣 Hot 100 刷题记录 - 二叉树的中序遍历
a李兆洋
leetcode算法职场和发展
力扣Hot100刷题记录-二叉树的中序遍历题目描述二叉树的中序遍历是力扣Hot100中的一道经典题目,题目要求如下:给定一个二叉树的根节点root,返回它的中序遍历结果。示例1:输入:root=[1,null,2,3]输出:[1,3,2]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1]解题思路中序遍历是二叉树遍历的一种方式,遍历顺序为:左子树->根节点->右子树。常
- flask网站部署到服务器教程
鹊起244
flask服务器python
flask网站部署到服务器教程第一步:将本地文件压缩上传至服务器进入到项目所在目录,cmd使用下列指令scp/filenameusername@servername:/path示例第二步,使用ssh登录,解压缩上传到服务器的文件使用下列指令unzipfilename第三步如没有改动端口或其他,直接cd进入项目文件夹,运行项目使用下列指令来运行python3app.py运行成功后,可以通过相应域名访
- 【编程向导】-JavaScript-基础语法-类型检测
wtrees_松阳
javaScript知识图谱javascript原型模式开发语言
类型检测类型检测的方法:typeofinstanceofObject.prototype.toStringconstructortypeoftypeof操作符返回一个字符串,表示未经计算的操作数的类型。typeofundefined;//"undefined"typeofnull;//"object"typeof100;//"number"typeofNaN;//"number"typeoftru
- pycharm配置Anaconda运行环境报错:error code:2.F:\Anaconda\Anaconda3\python.exe can.t opeen file
深入原理
pythonpycharmideanconda
报错内容:errorcode:2.F:\Anaconda\Anaconda3\python.execan.topeenfile需要选择conda.exe,而不是python.exe。而conda.exe存在于Anaconda3的Scripts目录下;之后加载出来你的Anaconda;
- 基于python的手写数字识别knn_用sklearn中的KNN实现Kaggle手写数字识别
普和司
importcsvfromsklearnimportneighbors#导入训练数据和测试数据defloadData(filename1,filename2,trainDataSet,trainTargetSet,testDataSet):withopen(filename1,'r')ascsvfile1:lines1=csv.reader(csvfile1)dataSet=list(lines1
- OSError: We couldn‘t connect to ‘https://huggingface.co‘ to load this file,
小李飞刀李寻欢
Notebookhuggingfacebert分类大模型
场景:训练bert-base-chinese下游任务:分类。在一个服务器可以用,但GPU只有一个卡,只能换一个服务器,换个服务器又要重装环境,但后者下载模型有问题,手动用git-lfs下载后指定位置报错:Traceback(mostrecentcalllast):/examples/pytorch/text-classification/run_glue.py",line622,inmain()/
- 点云边缘提取及可视化
Alan Lan
PCL
点云素材:bunny.txt#include#include#includevoidCreateCloudFromTxt(conststd::string&file_path,pcl::PointCloud::Ptrcloud){std::ifstreamfin(file_path.c_str());std::stringline;pcl::PointXYZpoint;while(getline(
- C++中使用new和delete动态地分配和释放内存
图灵,图灵,图个机灵
C++编程基础c++
C++中使用new和delete动态地分配和释放内存如果在程序中使用下面这样的数组声明:intmyNums[100];//astaticarrayof100integers程序将存在两个问题。1.这限制了程序的容量,无法存储100个以上的数字。2.如果只需存储1个数字,却为100个数字预留存储空间,这将降低系统的性能。导致这些问题的原因是,数组的内存分配是静态和固定的。要编写根据用户需要使用内存资
- c++比较与对比动态内存分配和回收运算符new,new[],delete,delete[]。
成风693
c++开发语言
在C++中,动态内存管理是通过运算符new、new[]、delete和delete[]来实现的。它们分别用于分配和释放动态内存。1.new和new[]new1.用途:用于分配单个对象的内存。2.语法:Type*ptr=newType;行为:1.分配足够的内存来存储一个Type类型的对象。2.调用Type的构造函数来初始化对象。3.返回指向分配内存的指针。示例:int*ptr=newint;//分配
- 代码随想录|二叉树|10二叉树的最小深度
Paper Clouds
算法数据结构c++leetcode决策树
leetcode:111.二叉树的最小深度-力扣(LeetCode)题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7],返回最小深度2思路同样是前序方法和后序方法,后序遍历的话就是求高度。递归三部曲(1)参数和返回值输入二叉树的根节点,返回int类型的高度(2
- 对称二叉树 二叉树的最大深度 二叉树的最小深度
默默修炼的小趴菜
算法数据结构
1.给定一个二叉树,检查它是否是镜像对称的。#includeusingnamespacestd;structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode(intx){val=x;left=NULL;right=NULL;}};boolcompare(TreeNode*left,TreeNode*right){if(left==NULL&
- 戴尔笔记本win8系统改装win7系统
sophia天雪
win7戴尔改装系统win8
戴尔win8 系统改装win7 系统详述
第一步:使用U盘制作虚拟光驱:
1)下载安装UltraISO:注册码可以在网上搜索。
2)启动UltraISO,点击“文件”—》“打开”按钮,打开已经准备好的ISO镜像文
- BeanUtils.copyProperties使用笔记
bylijinnan
java
BeanUtils.copyProperties VS PropertyUtils.copyProperties
两者最大的区别是:
BeanUtils.copyProperties会进行类型转换,而PropertyUtils.copyProperties不会。
既然进行了类型转换,那BeanUtils.copyProperties的速度比不上PropertyUtils.copyProp
- MyEclipse中文乱码问题
0624chenhong
MyEclipse
一、设置新建常见文件的默认编码格式,也就是文件保存的格式。
在不对MyEclipse进行设置的时候,默认保存文件的编码,一般跟简体中文操作系统(如windows2000,windowsXP)的编码一致,即GBK。
在简体中文系统下,ANSI 编码代表 GBK编码;在日文操作系统下,ANSI 编码代表 JIS 编码。
Window-->Preferences-->General -
- 发送邮件
不懂事的小屁孩
send email
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
- 动画合集
换个号韩国红果果
htmlcss
动画 指一种样式变为另一种样式 keyframes应当始终定义0 100 过程
1 transition 制作鼠标滑过图片时的放大效果
css
.wrap{
width: 340px;height: 340px;
position: absolute;
top: 30%;
left: 20%;
overflow: hidden;
bor
- 网络最常见的攻击方式竟然是SQL注入
蓝儿唯美
sql注入
NTT研究表明,尽管SQL注入(SQLi)型攻击记录详尽且为人熟知,但目前网络应用程序仍然是SQLi攻击的重灾区。
信息安全和风险管理公司NTTCom Security发布的《2015全球智能威胁风险报告》表明,目前黑客攻击网络应用程序方式中最流行的,要数SQLi攻击。报告对去年发生的60亿攻击 行为进行分析,指出SQLi攻击是最常见的网络应用程序攻击方式。全球网络应用程序攻击中,SQLi攻击占
- java笔记2
a-john
java
类的封装:
1,java中,对象就是一个封装体。封装是把对象的属性和服务结合成一个独立的的单位。并尽可能隐藏对象的内部细节(尤其是私有数据)
2,目的:使对象以外的部分不能随意存取对象的内部数据(如属性),从而使软件错误能够局部化,减少差错和排错的难度。
3,简单来说,“隐藏属性、方法或实现细节的过程”称为——封装。
4,封装的特性:
4.1设置
- [Andengine]Error:can't creat bitmap form path “gfx/xxx.xxx”
aijuans
学习Android遇到的错误
最开始遇到这个错误是很早以前了,以前也没注意,只当是一个不理解的bug,因为所有的texture,textureregion都没有问题,但是就是提示错误。
昨天和美工要图片,本来是要背景透明的png格式,可是她却给了我一个jpg的。说明了之后她说没法改,因为没有png这个保存选项。
我就看了一下,和她要了psd的文件,还好我有一点
- 自己写的一个繁体到简体的转换程序
asialee
java转换繁体filter简体
今天调研一个任务,基于java的filter实现繁体到简体的转换,于是写了一个demo,给各位博友奉上,欢迎批评指正。
实现的思路是重载request的调取参数的几个方法,然后做下转换。
- android意图和意图监听器技术
百合不是茶
android显示意图隐式意图意图监听器
Intent是在activity之间传递数据;Intent的传递分为显示传递和隐式传递
显式意图:调用Intent.setComponent() 或 Intent.setClassName() 或 Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
隐式意图;不指明调用的名称,根据设
- spring3中新增的@value注解
bijian1013
javaspring@Value
在spring 3.0中,可以通过使用@value,对一些如xxx.properties文件中的文件,进行键值对的注入,例子如下:
1.首先在applicationContext.xml中加入:
<beans xmlns="http://www.springframework.
- Jboss启用CXF日志
sunjing
logjbossCXF
1. 在standalone.xml配置文件中添加system-properties:
<system-properties> <property name="org.apache.cxf.logging.enabled" value=&
- 【Hadoop三】Centos7_x86_64部署Hadoop集群之编译Hadoop源代码
bit1129
centos
编译必需的软件
Firebugs3.0.0
Maven3.2.3
Ant
JDK1.7.0_67
protobuf-2.5.0
Hadoop 2.5.2源码包
Firebugs3.0.0
http://sourceforge.jp/projects/sfnet_findbug
- struts2验证框架的使用和扩展
白糖_
框架xmlbeanstruts正则表达式
struts2能够对前台提交的表单数据进行输入有效性校验,通常有两种方式:
1、在Action类中通过validatexx方法验证,这种方式很简单,在此不再赘述;
2、通过编写xx-validation.xml文件执行表单验证,当用户提交表单请求后,struts会优先执行xml文件,如果校验不通过是不会让请求访问指定action的。
本文介绍一下struts2通过xml文件进行校验的方法并说
- 记录-感悟
braveCS
感悟
再翻翻以前写的感悟,有时会发现自己很幼稚,也会让自己找回初心。
2015-1-11 1. 能在工作之余学习感兴趣的东西已经很幸福了;
2. 要改变自己,不能这样一直在原来区域,要突破安全区舒适区,才能提高自己,往好的方面发展;
3. 多反省多思考;要会用工具,而不是变成工具的奴隶;
4. 一天内集中一个定长时间段看最新资讯和偏流式博
- 编程之美-数组中最长递增子序列
bylijinnan
编程之美
import java.util.Arrays;
import java.util.Random;
public class LongestAccendingSubSequence {
/**
* 编程之美 数组中最长递增子序列
* 书上的解法容易理解
* 另一方法书上没有提到的是,可以将数组排序(由小到大)得到新的数组,
* 然后求排序后的数组与原数
- 读书笔记5
chengxuyuancsdn
重复提交struts2的token验证
1、重复提交
2、struts2的token验证
3、用response返回xml时的注意
1、重复提交
(1)应用场景
(1-1)点击提交按钮两次。
(1-2)使用浏览器后退按钮重复之前的操作,导致重复提交表单。
(1-3)刷新页面
(1-4)使用浏览器历史记录重复提交表单。
(1-5)浏览器重复的 HTTP 请求。
(2)解决方法
(2-1)禁掉提交按钮
(2-2)
- [时空与探索]全球联合进行第二次费城实验的可能性
comsci
二次世界大战前后,由爱因斯坦参加的一次在海军舰艇上进行的物理学实验 -费城实验
至今给我们大家留下很多迷团.....
关于费城实验的详细过程,大家可以在网络上搜索一下,我这里就不详细描述了
在这里,我的意思是,现在
- easy connect 之 ORA-12154: TNS: 无法解析指定的连接标识符
daizj
oracleORA-12154
用easy connect连接出现“tns无法解析指定的连接标示符”的错误,如下:
C:\Users\Administrator>sqlplus username/
[email protected]:1521/orcl
SQL*Plus: Release 10.2.0.1.0 – Production on 星期一 5月 21 18:16:20 2012
Copyright (c) 198
- 简单排序:归并排序
dieslrae
归并排序
public void mergeSort(int[] array){
int temp = array.length/2;
if(temp == 0){
return;
}
int[] a = new int[temp];
int
- C语言中字符串的\0和空格
dcj3sjt126com
c
\0 为字符串结束符,比如说:
abcd (空格)cdefg;
存入数组时,空格作为一个字符占有一个字节的空间,我们
- 解决Composer国内速度慢的办法
dcj3sjt126com
Composer
用法:
有两种方式启用本镜像服务:
1 将以下配置信息添加到 Composer 的配置文件 config.json 中(系统全局配置)。见“例1”
2 将以下配置信息添加到你的项目的 composer.json 文件中(针对单个项目配置)。见“例2”
为了避免安装包的时候都要执行两次查询,切记要添加禁用 packagist 的设置,如下 1 2 3 4 5
- 高效可伸缩的结果缓存
shuizhaosi888
高效可伸缩的结果缓存
/**
* 要执行的算法,返回结果v
*/
public interface Computable<A, V> {
public V comput(final A arg);
}
/**
* 用于缓存数据
*/
public class Memoizer<A, V> implements Computable<A,
- 三点定位的算法
haoningabc
c算法
三点定位,
已知a,b,c三个顶点的x,y坐标
和三个点都z坐标的距离,la,lb,lc
求z点的坐标
原理就是围绕a,b,c 三个点画圆,三个圆焦点的部分就是所求
但是,由于三个点的距离可能不准,不一定会有结果,
所以是三个圆环的焦点,环的宽度开始为0,没有取到则加1
运行
gcc -lm test.c
test.c代码如下
#include "stdi
- epoll使用详解
jimmee
clinux服务端编程epoll
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linu
- Hibernate对Enum的映射的基本使用方法
linzx0212
enumHibernate
枚举
/**
* 性别枚举
*/
public enum Gender {
MALE(0), FEMALE(1), OTHER(2);
private Gender(int i) {
this.i = i;
}
private int i;
public int getI
- 第10章 高级事件(下)
onestopweb
事件
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
- 孙子兵法
roadrunners
孙子兵法
始计第一
孙子曰:
兵者,国之大事,死生之地,存亡之道,不可不察也。
故经之以五事,校之以计,而索其情:一曰道,二曰天,三曰地,四曰将,五
曰法。道者,令民于上同意,可与之死,可与之生,而不危也;天者,阴阳、寒暑
、时制也;地者,远近、险易、广狭、死生也;将者,智、信、仁、勇、严也;法
者,曲制、官道、主用也。凡此五者,将莫不闻,知之者胜,不知之者不胜。故校
之以计,而索其情,曰
- MySQL双向复制
tomcat_oracle
mysql
本文包括:
主机配置
从机配置
建立主-从复制
建立双向复制
背景
按照以下简单的步骤:
参考一下:
在机器A配置主机(192.168.1.30)
在机器B配置从机(192.168.1.29)
我们可以使用下面的步骤来实现这一点
步骤1:机器A设置主机
在主机中打开配置文件 ,
- zoj 3822 Domination(dp)
阿尔萨斯
Mina
题目链接:zoj 3822 Domination
题目大意:给定一个N∗M的棋盘,每次任选一个位置放置一枚棋子,直到每行每列上都至少有一枚棋子,问放置棋子个数的期望。
解题思路:大白书上概率那一张有一道类似的题目,但是因为时间比较久了,还是稍微想了一下。dp[i][j][k]表示i行j列上均有至少一枚棋子,并且消耗k步的概率(k≤i∗j),因为放置在i+1~n上等价与放在i+1行上,同理