- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二进制在编程中的应用;摘要:二进制算法是一种十分实用的方法,在许多方面都有重要的应用。在编程中灵活运用二进制,利用二进制的一些重要性质,会起到意想不到的效果。
关键词:二进制;动态规划;树状数组;多重背包;线段树; 二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。在具体编程中,二进制也有重要的作用。;第一部分 “0”与“1”既可以表示逻辑,也 可以表示“有”或“无”。在动态 规划状态压缩算法中,巧妙地用二 进制递推。;一、题目:X?行Y?列的棋盘,还有很多完全相同的马(你可以认为有无数个)。现在在棋盘上摆上马(或者不摆),求任何马无法攻击另一匹马的方案总数。;关键代码:
for(register int i=3; i=x; ++i) {
for(register int j=0; j (1y); ++j) {
for(register int k=0; k (1y); ++k) {
if(at_bt(k)j||at_bt(j)k) continue;
for(register int s=0; s (1y) ; ++s) {
if(at_bt(s)k|| at_bt(k)s ||at_3(s,k)j || at_3(j,k)s) continue;
dp[i][j][k]+=dp[i-1][k][s];
dp[i][j][k]%=mod;
}
}
}
}; 在此题中,巧妙地运用整数的二进制表示某行每个位置马的有无,从而轻松递推出最后结果。;第二部分 二进制每一位数字都表示2的n次方, 则每一个数k都可以表示成 个 数的和; 题目:有 N 种物品和一个容量是 V 的背包,第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi,求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大.
输出最大价值。;代码:
cinnm;
for(register int i=0;in;i++){
int vv,ww,s;
cinvvwws;
for(register int i=1;i=s;i*=2) //二进制优化
v[k]=vv*i,w[k++]=ww*i,s-=i;
if(s0) v[k]=vv*s,w[k++]=ww*s;
}
for(register int i=0;ik;i++) //01背包
for(register int j=m;j=v[i];j--)
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);; 在多重背包问题中,将每一个数的n倍表示成几个数??和,保证合理性的同时亦大幅提升了速度。;第三部分 “1”本身是一个数字,表示“一 个”,将其当作储存数据的空间, 通过一定的结构联系起来,可以起 到重要的作用。;题目:已知一个数列,你需要进行下面两种操作:
1、将某一个数加上?x
2、求出某区间每一个数的和;代码:
#define lowbit(a) ((a)-(a))
void update(int x,int y,int n){
for(int i=x;i=n;i+=lowbit(i))
c[i] += y;
}
int getsum(int x){
int ans = 0;
for(int i=x;i;i-=lowbit(i))
ans += c[i];
return ans;
}; 这是树状数组的解法,相对方便,而用途更为广泛的解法是用线段树。;inline ll rs(ll x){
return x1|1;
}
void scan(){
cinnm;
for(ll i=1;i=n;i++)
scanf(%lld,a[i]);
}
inline void push_up(ll p){
ans[p]=ans[ls(p)]+ans[rs(p)];
};void build(ll p,ll l,ll r){
tag[p]=0;
if(l==r){ans[p]=a[l];return ;}
ll mid=(l+r)1;
build(ls(p),l,mid);
build(rs(p),mid+1,r);
push_up(p);
}
inline void f(ll p,ll l,ll r,ll k){
tag[
您可能关注的文档
- 基于物联网的公共安全技术与与应用 教学PPT课件.pptx
- 围手术期急性心肌缺血与心肌梗死 急性冠状动脉综合征 教学PPT课件.pptx
- 施工技术资料 山东省建筑工程(建筑与结构工程)施工资料管理规程DB37T5072-2016培训 教学PPT课件.pptx
- 继发性癫痫护理的相关知识 教学PPT课件.pptx
- 稼动分析基本原理 教学PPT课件.pptx
- 消元——解二元一次方程组 人教版七年级下册第8单元 教学PPT课件.pptx
- 统计调查 数据的收集、整理与描述 人教版七年级下册 教学PPT课件.pptx
- 多种多样的动物专题训练 教学PPT课件.pptx
- 玲玲的画 二年级语文 教学PPT课件.pptx
- 桥梁及桥梁材料基础知识 教学PPT课件.pptx
文档评论(0)