二维

哈夫曼树基本操作(暂无压缩文件功能版本)

限于喜欢 提交于 2020-01-15 07:34:53
# include "pch.h" # define _CRT_SECURE_NO_WARNINGS //避免strcpy()不能使用 # include <stdio.h> # include <iostream> # include <string.h> # include <iomanip> //需要控制格式 // 这个头文件是声明一些 “流操作符”的 //比较常用的有:setw(int);//设置显示宽度,left//right//设置左右对齐。 setprecision(int);//设置浮点数的精确度。 using namespace std ; using std :: strcpy ; typedef char * * HuffmanCode ; //哈夫曼编码存放的二维动态数组 typedef struct { int weight ; int parent , lchild , rchild ; } HTnode , * HuffmanTree ; typedef struct { char ch ; int weight ; } CharArray ; //1.选择权值最小的2个结点 void Select ( HTnode a [ ] , int n , int & s1 , int & s2 ) { //n个结点中找最小2个结点,s1最小,s2次小 for

二维前缀和

纵饮孤独 提交于 2020-01-14 07:08:44
直接看这篇: 二维前缀和详解 预处理矩阵a,pre[x][y]为左上角(1,1)到右下角(x,y)矩阵的和: for ( int i = 1 ; i <= n ; ++ i ) { for ( int j = 1 ; j <= n ; ++ j ) { pre [ i ] [ j ] = pre [ i ] [ j - 1 ] + pre [ i - 1 ] [ j ] - pre [ i - 1 ] [ j - 1 ] + a [ i ] [ j ] ; } } 求左上角(x1,y1)到右下角(x2,y2)矩阵的和: long long sum = pre [ x2 ] [ y2 ] - pre [ x1 - 1 ] [ y2 ] - pre [ x2 ] [ y1 - 1 ] + pre [ x1 - 1 ] [ y1 - 1 ] ;     例题: 金牌厨师HiLin与HJGG 题意:在一个大矩阵中,求最小的子矩阵,子矩阵和大于k。 解析:子矩阵的大小和子矩阵的最大和具有单调性,有二分查询,二维前缀和来Check。 # include <bits/stdc++.h> using namespace std ; int a [ 2010 ] [ 2010 ] ; int n , k ; long long pre [ 2010 ] [ 2010 ] ; bool Check (

cf#590 D 二维树状数组

久未见 提交于 2020-01-14 01:00:42
题意 给一个10^5之内的字符串(小写字母)时限2s 输入n,有n个操作 (n<10^5) 当操作是1的时候,输入位置x和改变的字母 当操作是2的时候,输入区间l和r,有多少不同的字母 思路 二维树状数组 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 #include<map> 6 #define lowbit(x) x&(-x) 7 using namespace std; 8 const int maxn=1e5+10; 9 char s[maxn]; 10 int l,n,yi,er,san; 11 char c; 12 struct node{ 13 int tr[maxn]; 14 void inint(){ 15 memset(tr,0,sizeof(tr)); 16 } 17 void updata(int x,int y){ 18 for(int i=x; i<=l; i+=lowbit(i)){ 19 tr[i]+=y; 20 } 21 } 22 int geshu(int x,int y){ 23 int sum1=0,sum2=0; 24 for(int i=x; i>0; i-=lowbit(i)){ 25 sum1+=tr[i]; 26 }

子函数通过一级指针访问二维数组

痞子三分冷 提交于 2020-01-12 17:15:34
#include <stdio.h> #define COLS 10 #define ROWS 6 char erwei[6][10]={{1,2,3,4,5,6,7,8,9,10}, {10,9,8,7,6,5,4,3,2,1}, {1,2,3,4,5,6,7,8,9,10}, {10,9,8,7,6,5,4,3,2,1}, {1,2,3,4,5,6,7,8,9,10}, {10,9,8,7,6,5,4,3,2,1} }; test (char *image){ int i,j=0; for(i=0;i<COLS*ROWS;i++){ printf("image[%d][%d]%d\n",i,j,*image); image++; } } test2 (char *image){ int i,j=0; for(i=0;i<ROWS;i++){ for(j=0;j<COLS;++j){ printf("image[%d][%d]%d\n",i,j,image[i*10+j]); } } } void main() { test((char *)erwei); // test(&erwei); printf("\n\n\n"); test2((char *)erwei); // test2(&erwei); return 0; } 来源: https://www.cnblogs

结对开发——求二维环形数组所有子矩阵最大和的问题

百般思念 提交于 2020-01-12 03:49:14
一、题目要求:   输入一个二维整形数组,数组里有正数也有负数。   二维数组首尾相接,象个一条首尾相接带子一样。   数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。   求所有子数组的和的最大值。   要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和。 二、解决思路:   由于上次我们做过求二维数组最大子矩阵和的问题,又做了求一维环状数组的子数组最大值问题,这次就在以前的基础上进行修改,先对二维数组进行了重构,形成一个环状二维数组,然后再用求二维数组子矩阵最大和的方法求得最终结果。 三、程序代码: #include "stdafx.h" #include<iostream.h> int main(int argc, char* argv[]) { int i,j; int a[3][5]={{1,-2,3},{1,-3,2},{4,-4,5}}; int b[3][5]; for(i=0;i<3;i++) { for(j=0;j<2;j++) a[i][j+3]=a[i][j]; } int max=a[0][0]; cout<<"初始二维数组为:"<<endl; for(i=0;i<3;i++) { for(j=0;j<3;j++) { cout<<a[i][j]<<' '; } cout<<endl; } cout<<"重构后环形数组为:"

acwing 8. 二维费用的背包问题

筅森魡賤 提交于 2020-01-09 14:50:12
传送门 描述 有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。 每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。 求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。 输出最大价值。 输入格式 第一行两个整数,N,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。 接下来有 N 行,每行三个整数 vi,mi,wi,用空格隔开,分别表示第 i 件物品的体积、重量和价值。 输出格式 输出一个整数,表示最大价值。 数据范围 0<N≤1000 0<V,M≤100 0<vi,mi≤100 0<wi≤1000 输入样例 4 5 6 1 2 3 2 4 4 3 4 5 4 5 6 输出样例: 8 二维费用背包就比一维费用多了一个限制因素,做法还是一样的,只不过多了一层循环来比较重量 AC代码如下: #include<bits/stdc++.h> using namespace std; int a[1010],b[1010],c[1010],dp[1010][1010]; int main() { int n,V,M; cin>>n>>V>>M; for(int i=0;i<n;i++) { int v,m,w; cin>>v>>m>>w; for(int j=V;j>=v;j--){

树状数组及二维树状数组

末鹿安然 提交于 2020-01-08 19:28:35
一直以为树状数组能用线段树水过去,直到我今天碰上了树状数组模板题。 然后就是开始认真的学习树状数组,突然发现怎么这么好写qwqqqq。 部分图片转自 https://www.cnblogs.com/hsd-/p/6139376.html 一.树状数组 树状数组是一种数据结构,核心思想是利用二进制的补码思想。 首先就是树状数组的结构图 然后我们对他进行变形 是不是感觉更好理解了呢? 然后我们对其进行标号 c数组表示的是记录的值,A数组表示的是原序列。然后就是所有关于树状数组的博客都会有的c数组的存值的展示,博主较懒就不写了,具体看推荐博客。 最重要的性质是 C[i]=A[i-2^k+1]+A[i-2^k+2]+......A[i]; (k为i的二进制中从最低位到高位连续零的长度) 上面说k是二进制中最低位到最高位的连续零的长度也就是6的二进制是110,那么k就是1,然后我们带入: c[6]=A[6-2+1]+A[6-2+2]=A[5]+A[6] 看,是不是与上方式子相符,这就是 lowbit 要实现的功能。那么, lowbit 实现的原理是啥呢? 先粘一下 lowbit 函数的代码 1 int lowbit(int k) 2 { 3 return k&(-k); 4 } lowbit k&(-k)是啥意思呢? -k是k的补码,也就是反码+1,反码是啥自行百度,反正也很简单。

[LeetCode] 240、搜索二维矩阵 II

会有一股神秘感。 提交于 2020-01-07 18:32:40
题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例: 现有矩阵 matrix 如下: [ [ 1 , 4 , 7 , 11 , 15 ] , [ 2 , 5 , 8 , 12 , 19 ] , [ 3 , 6 , 9 , 16 , 22 ] , [ 10 , 13 , 14 , 17 , 24 ] , [ 18 , 21 , 23 , 26 , 30 ] ] 给定 target = 5,返回 true。 给定 target = 20,返回 false。 解题思路 原题(O(m+n)),但是这个题还有逐行二分(O(nlogn))的做法。 参考代码 class Solution { public : bool searchMatrix ( vector < vector < int > > & matrix , int target ) { if ( matrix . size ( ) == 0 || matrix [ 0 ] . size ( ) == 0 ) return false ; int rows = matrix . size ( ) ; int cols = matrix [ 0 ] . size ( ) ; int row = 0 ;

Lesson5 Shader加载二维贴纸

别说谁变了你拦得住时间么 提交于 2020-01-07 18:31:43
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> // HelloShader // Created by gdxz on 16/10/28. #import "LearnView.h" #import <OpenGLES/ES2/gl.h> @interface LearnView() @property (nonatomic, strong) EAGLContext *myContext; @property (nonatomic, strong) CAEAGLLayer *myEagLayer; @property (nonatomic, assign) GLuint myProgram; @property (nonatomic, assign) GLuint myColorRenderBuffer; @property (nonatomic, assign) GLuint myColorFrameBuffer; - (void)setupLayer; @end @implementation LearnView + (Class)layerClass { return [CAEAGLLayer class]; } - (void)layoutSubviews { [self setupLayer]; [self setupContext];