dp 订阅
DisplayPort(简称DP)是一个由PC及芯片制造商联盟开发,视频电子标准协会(VESA)标准化的数字式视频接口标准。该接口免认证、免授权金,主要用于视频源与显示器等设备的连接,并也支持携带音频、USB和其他形式的数据。此接口的设计是为取代传统的VGA、DVI和FPD-Link(LVDS)接口。通过主动或被动适配器,该接口可与传统接口(如HDMI和DVI)向后兼容。 展开全文
DisplayPort(简称DP)是一个由PC及芯片制造商联盟开发,视频电子标准协会(VESA)标准化的数字式视频接口标准。该接口免认证、免授权金,主要用于视频源与显示器等设备的连接,并也支持携带音频、USB和其他形式的数据。此接口的设计是为取代传统的VGA、DVI和FPD-Link(LVDS)接口。通过主动或被动适配器,该接口可与传统接口(如HDMI和DVI)向后兼容。
信息
定    义
数字式视频接口标准
简    称
DP
开发者
PC及芯片制造商联盟
中文名
显示接口
学    科
通讯工程
外文名
DisplayPort
DisplayPort接口概观
DisplayPort是第一个依赖数据包化数据传输技术的显示通信端口,这种数据包化传输技术可以在以太网、USB和PCI Express等技术中找到。它既可以用于内部显示连接,也可以用于外部的显示连接。与过去的标准需要在每个输出端的差分对里面固定传输定时器信号不同的是,DisplayPort协议是基于小的数据报文被称为微报文,这种微报文可以将定时器信号嵌入在数据流中。其优点是较少的引脚数,就可以实现更高的分辨率。数据报文的应用也允许使用DisplayPort可扩展,这就意味着随着时间的推移,物理通信端口本身不需要显著的变化就可以增加额外的功能了。 [1]  DisplayPort可用于同时传输音频和视频,这两项中每一项都可以在没有另外一项的基础上单独传输。视频信号路径中每个颜色通道可以有6到16位,音频路径可以有多达8通道24位192 kHz的非压缩的PCM音频,或可以在音频流中封装压缩的音频格式。一个双向的、半双工的辅助通道携带了主链接用的设备管理和设备控制数据,如VESAEDID、MCCS和DPMS标准。此外,该通信端口是能够运送双向USB信号。DisplayPort信号不兼容DVI或HDMI。然而,双模式DisplayPorts被设计用来通过该通信端口传输单链接DVI或HDMI1.2/1.4的协议,需要通过使用一个外部无源连接器来实现,选择所需的信号,并将电气信号从LVDS转换为TMDS。带有被动连接器的双模DisplayPorts不支持VGA和双链接DVI。这些通信端口需要有源连接器来转换所需要输出的协议和信号。VGA连接器可以使用DisplayPort连接器来供电,而双链接DVI连接器可能依赖于外部电源(参考HDMI、DVI和VGA兼容性)。DisplayPort连接器在主链路可以有1、2、或4路差分数据对(巷道),每巷道可以在自定时器运行于162、270、或540MHz的基础上其原始码率为1.62、2.7或者5.4 Gbit/s。数据为8b/10b编码,即每8位的消息被编入10比特符号中。因此,解码后每通道的有效数据传输速率是1.296、2.16、4.32 Gbit/s(或者说是总量的80%)。
收起全文
精华内容
参与话题
问答
  • Codeforces 1312 E. Array Shrinking (区间dp)

    千次阅读 2020-03-10 09:58:53
    E. Array Shrinking time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output You are given an array a1,a2,…,an. You can perform the following operation...

    E. Array Shrinking
    time limit per test2 seconds
    memory limit per test256 megabytes
    inputstandard input
    outputstandard output
    You are given an array a1,a2,…,an. You can perform the following operation any number of times:

    Choose a pair of two neighboring equal elements ai=ai+1 (if there is at least one such pair).
    Replace them by one element with value ai+1.
    After each such operation, the length of the array will decrease by one (and elements are renumerated accordingly). What is the minimum possible length of the array a you can get?

    Input
    The first line contains the single integer n (1≤n≤500) — the initial length of the array a.

    The second line contains n integers a1,a2,…,an (1≤ai≤1000) — the initial array a.

    Output
    Print the only integer — the minimum possible length you can get after performing the operation described above any number of times.

    Examples
    inputCopy
    5
    4 3 2 2 3
    outputCopy
    2
    inputCopy
    7
    3 3 4 4 4 3 3
    outputCopy
    2
    inputCopy
    3
    1 3 5
    outputCopy
    3
    inputCopy
    1
    1000
    outputCopy
    1
    Note
    In the first test, this is one of the optimal sequences of operations: 4 3 2 2 3 → 4 3 3 3 → 4 4 3 → 5 3.

    In the second test, this is one of the optimal sequences of operations: 3 3 4 4 4 3 3 → 4 4 4 4 3 3 → 4 4 4 4 4 → 5 4 4 4 → 5 5 4 → 6 4.

    In the third and fourth tests, you can’t perform the operation at all.

    题意:
    跟2048类似,相同的两个x可以合并成x+1,给一个序列,问最后最少能剩下多少个元素。

    思路:

    1. 首先数据才500,很明显的区间dp数据。
    2. 考虑之前区间dp[1][n]作为答案,那么dp数组很明显为 i 到 j 最后剩下多少个元素,那么还需要另外用一个数组a来表示 i 到 j 合并出来的数字。
    3. 先预处理dp[i][j]的元素个数为j-i+1,dp[i][i]=1。
    4. 然后就是常规区间dp了,枚举区间长度,区间起点和区间终点。
    5. 只有当左区间和右区间的长度为1且左右区间各自合并出来的数字相等时才可以合并,即dp[l][k]==1&&dp[k+1][r]==1&&a[l][k]==a[k+1][r]。
    6. 如果有什么讲的不清楚的地方欢迎提出来,欢迎交流~

    代码:

    #include<bits/stdc++.h>
    #define ll long long
    #define inf 0x3f3f3f3f
    #define mod 1000000007
    #define PI acos(-1)
    #define fi first
    #define se second
    #define lowbit(x) (x&(-x))
    #define mp make_pair
    #define pb push_back
    #define ins insert
    #define si size()
    #define E exp(1.0)
    #define fixed cout.setf(ios::fixed)
    #define fixeds(x) setprecision(x)
    #pragma GCC optimize(2)
    using namespace std;
    inline ll read(){ll s=0,w=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
    return s*w;}void put1(){ puts("YES") ;}void put2(){ puts("NO") ;}
    void put3(){ puts("-1"); }ll qpf(ll a, ll b, ll p){ll ret = 0;while(b)
    {if(b & 1) ret = (ret + a) % p;a = (a + a) % p;b >>= 1;}return ret % p ;}
    ll qp(ll a, ll n, ll p){ll ret = 1;while(n){if(n & 1) ret = qpf(ret, a, p);
    a = qpf(a, a, p);n >>= 1;}return ret % p ;}//��=acos(L/2R);
    //void debug1(){ cout<<"I CAN AC"<<endl;}//void debug2(){printf("T A T\n");}
     
    const int manx=1e3+5;
     
    ll dp[manx][manx],a[manx][manx];
     
    int main()
    {
        ll n=read();
        for(int i=1;i<=n;i++)
            for(int j=i+1;j<=n;j++)
                dp[i][j]=j-i+1;
        for(int i=1;i<=n;i++)
            a[i][i]=read(),dp[i][i]=1;
        for(int len=2;len<=n;len++)
            for(int l=1;l+len-1<=n;l++)
            {
                int r=l+len-1;
                for(int k=l;k<r;k++){
                    dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);
                    if(dp[l][k]==1&&dp[k+1][r]==1&&a[l][k]==a[k+1][r])
                        dp[l][r]=1,a[l][r]=a[l][k]+1;
                }
            }
        printf("%lld",dp[1][n]);
        return 0;
    }
    
    展开全文
  • 面试官给我出了道老题, 我用了一亩三分地上的dp解答,来源如下 http://www.1point3acres.com/bbs/thread-145290-1-1.html 题目如下: String s1 = ...
  • DP_区间DP专辑】

    千次阅读 2013-04-13 17:11:50
    区间DP是一类在区间上进行动态规划的最优问题,一般是根据问题设出一个表示状态的dp,可以是二维的也可以是三维的,一般情况下为二维。然后将问题划分成两个子问题,也就是一段区间分成左右两个区间,然后将左右两个...

         区间DP是一类在区间上进行动态规划的最优问题,一般是根据问题设出一个表示状态的dp,可以是二维的也可以是三维的,一般情况下为二维。然后将问题划分成两个子问题,也就是一段区间分成左右两个区间,然后将左右两个区间合并到整个区间,或者说局部最优解合并为全局最优解,然后得解。

        这类DP可以用常规的for循环来写,也可以用记忆化搜索来写,个人更倾向于记忆化搜索写法,因为这种写法相当易懂,要什么值你直接去记忆化搜索一下就ok了,随叫随到随用啊。


        1、Zoj 3537 Cake

        比较经典的三角剖分。

        状态转移方程:dp[i][j] = min(dp[i][k]+dp[k][j]+cost[i][k]+cost[k][j]),(j >= i+ 3,i+1<=k<=j-1,cost[i][k]为连一条i到k的线的费用)  

        详细报告见Here


        2、Light oj 1422 Halloween Costumes

        很基础的区间DP,是不老传说那题的减弱版。

        状态转移方程:dp[i][j] = dp[i][j-1] (arr[i] == arr[j])

                                dp[i][j] = min(dp[i][k]+dp[k+1][j]) (arr[i] == arr[k] && i <= k <= j)


         3、poj 2955 Brackets

         经典的区间DP模型--最大括号匹配数。如果找到一对匹配的括号[xxx]oooo,就把区间分成两部分,一部分是xxx,一部分是ooo,然后以此递归直到区间长度为1或者为2.

         状态转移方程:dp[i][j] = min(dp[i+1][j],dp[i+1][k-1]+dp[k+1][j]+1)(i<=k<=j&&i和k是一对括号)


         4、CF 149 D Coloring Brackets

         限制很多的括号匹配类区间DP,因为给定的是一个合法序列,那么左括号对应着右括号的位置就定下来了,那么[i,j]区间就分成了[i+1,match[i]-1]和[match[i]+1,j],再记录下某个区间左右两边的颜色就好了。 


        5、1651 Multiplication Puzzle

         经典的区间DP模型--矩阵链乘的变换。我们从一开始一步步往后删很困难进行DP,那么从最后只剩两个也就是最左和最右时开始一步步增加就成功转换为经典的矩阵链乘了。一开始的区间是[i,j],那么我们可以选择i<k<j进行转移,就是用这个k将区间划分成两段,然后这两段再往下递归,最后返回信息,最后的最后返回的[i,j]的最少乘积和。

         状态转移:dp[i][j] = min(dp[i][k]+dp[k][j]+arr[i]*arr[k]*arr[j]);


         6、Zoj 3469 Food Delivery

        有n个人叫餐,每个人都在x轴上,并且每个人都有个坑爹度(和等餐时间有关,据说顾客认为坑爹值到一定程度他的小宇宙就要爆发).现在送餐员从x轴上的某点出发,路上奔跑速度是v,要一次性把所有餐送完。叫餐的人得到餐的时间和顺序不同,坑爹度总和也就不同。合格的送餐员要让客户体验最好,请问最少坑爹度和为多少。先YY出一个结论,最优的送餐顺序肯定是餐馆往两边来回跑,然后就可以进行状态转移了.

         详细报告见Here.   


        7、Hdu 4283 You Are the One  (较难)

        题意是给定一个序列,序列内的人有屌丝值Di,是第然后将这个序列进栈,第i个人如果是第k个出栈,那么最后的屌丝总值增加Di * (k-1), 求一个出栈序列使得总屌丝值最小。看这题目很难想到区间DP吧?是的,很不像,这样的题目是好题目。其实一个合法的出栈序列有一个性质:如果第i个人第k个出栈,那么在i个之后的人不可能会比i更早,这样就找到一个划分关系,k以前位一段,k以后为一段。常规的状态转移方程:dp[i][j] = min(dp[i+1][k]+dp[k+1][j]+arr[i]*(k-i)+(k-i+1)*(sum[j]-sum[i])) (i<=k<=j).详细报告见Here.


         8、Sdut 不老的传说问题 (较难)

          刚看到题目的时候一点想法都没有,关于颜色的状态怎么表示,莫非要开一维来表示颜色,可是这样转移就很怪异了,或者倒着推,看刷几下全变成0,这似乎也不行。一筹莫展额时候突然想到根本不需要表示颜色,只需要表示某个位置是不是刷到了相应的颜色即可.5 4 3 1 2 1 2 1 3 4 5,假设5 4 3和3 4 5都刷到位了,那么1 2 1 2 1这四个位置上可能已经有其他颜色,但在我们看来它和无色一样,因为它不是最终的颜色。单独考虑1 2 1 2 1,这要怎么刷呢,由于最后的那个1和一开始那个1一样,如果他们之间距离小等于k,那么我们就可以只计算1 2 1 2。如果距离大于k,那么我们可以把这段区间分成1,2 1 2 1,或者1 2 1 , 2 1这两种方案中刷得次数较小的就是1 2 1 2 1需要刷得次数.以此递归下去,便可得解。因为本题是个圈,所以需要用到一个技巧,那就是把1.2...n-1复制到n+1,...2 * n - 1,然后最终的答案就是min(dp[i][i+n-1])(1<=i<=n)

         状态转移方程:dp[i][j] = dp[i][j-1] ; (i + k - 1 >=j && arr[j] == arr[i])

                               dp[i][j] = min(dp[i][k]+dp[k+1][j]) (1<=k<=min(i+k-1,j) && arr[i] == arr[k])

         初始化dp[i][i] = 1,dp[i][j] = INF (j > i)


         9、Hdu String painter

         2008年长春区域赛的题目,和上一题很像,但觉得比上一题简单。由于每次可以选择将某段刷成某个字符a,然后下次刷得时候,假设刷b,可以把这段刷成不一样的两段,前一段时b,后一段是a。大概的刷法就是这样,这个b其实是s2[i]。 

         状态转移方程很容易想到:dp[i][j][pre] = min(dp[i+1][k][s2[i]] + dp[k+1][pre]) (pre == s2[i] && i <= k <= j)

                                                dp[i][j][pre] = min(dp[i+1][k][s2[i]] + dp[k+1][pre] + 1) (pre != s2[i] && i <= k <= j)



         这类DP的写法一般是固定,两种写法可以参照下这篇文章里的代码:http://blog.csdn.net/woshi250hua/article/details/7973824

          本文ZeroClock原创,但可以转载,因为我们是兄弟。

    展开全文
  • ccpc河北大学生程序设计竞赛dp小总结

    千次阅读 多人点赞 2018-05-22 11:07:52
    近期题目来自校赛,赛前训练,省赛热身,河北ccpc正式比赛。 题目一: 题目描述: 由于第m个台阶上有好吃的薯条,所以薯片现在要爬一段m阶的楼梯. 薯片每步最多能爬k个阶梯,但是每到了第i个台阶,薯片身上的糖果...

    近期题目来自校赛,赛前训练,省赛热身,河北ccpc正式比赛。

    题目一:

    题目描述:

    由于第m个台阶上有好吃的薯条,所以薯片现在要爬一段m阶的楼梯.
    薯片每步最多能爬k个阶梯,但是每到了第i个台阶,薯片身上的糖果都会掉落ai个,现在问你薯片至少得掉多少糖果才能得到薯条?

    输入:

    多组数据输入,每组数据第一行输入两个数字m(1<m<=1000),k(1<=k<m),接下来有m行,每一行输入ai(0<ai<=1000),表示第i个台阶会掉落的糖果.

    输出:

    对于每组数据,输出至少要牺牲的糖果数.

    样例输入

    5 2
    1 2 3 4 5
    6 2
    6 5 4 3 2 1

    样例输出

    9
    9

    分析:经过的数字全部加起来,为一个累加和,求最小累加和

    递推关系:

    定义f(n)为必须到第n个台阶的最少累加和

    分析可以如何得到f(n),我们通过跳一步,可以怎么跳到第n个台阶呢?

    可以从第n-1个台阶跳到这里,可以n-2,n-3......n-k。

    也就是说,

    f(n)=an+min(f(n-1),f(n-2),......f(n-k))

    必须到第n个台阶的最少累加和,就等于能跳到这里的所有位置中,最小的那个f(),跳过来(也就是加上本身)。

    注意:前k个台阶可以从起点直接跳过来,贪心思想,经过任何多余的数字都不会是最优解。所以前k个f(n)直接赋值an.

    也可以维持单调队列把时间降到线性,不过o(n*k)已经足够过了。

     

    题目二:

    题目描述:

    JiangYu的小金库是一个三维立体的空间,大小为XYZ,里面每个位置都藏着各种价值的宝物,既然是宝物价值自然非同一般,可正可负。

    可恶的花花得知了这一切,想要偷走其中的珍宝们。

    可是Jiangyu的小金库安保措施十分严密,花花只有一次行动的机会,他决定偷走一个价值尽可能大的长方体区间。

    那么他最大能偷走多少钱的宝物呢?

    输入:

    第一行给出三个正整数 X,Y,Z

    第二行一个整数n, 宝藏的数量

    接下来n行,每行给出一个宝藏的位置xi,yi,zi, 以及价值ci

    保证宝藏位置不重复。 (1 \leq X,Y,Z \leq 201≤X,Y,Z≤20)

    (1 \leq n \leq X \times Y \times Z1≤n≤X×Y×Z)

    (1 \leq xi \leq X1≤xi≤X)

    (1 \leq yi \leq Y1≤yi≤Y)

    (1 \leq zi \leq Z1≤zi≤Z)

    (-1e9 \leq ci \leq 1e9−1e9≤ci≤1e9)

    输出:

    一个整数,最大的价值

    样例输入

    2 2 2
    8
    1 1 1 10
    1 1 2 9
    1 2 1 10
    1 2 2 9
    2 1 1 10
    2 1 2 9
    2 2 1 -1
    2 2 2 10

    样例输出

    66

     

    https://blog.csdn.net/hebtu666/article/details/82788866这个网址写了详细讲解哦。。。最好要看看

    首先要明白一维最大子数组问题,设dp[n]的含义为必须以an结尾的数组中的最大和。

    所以dp[n]就是,每一个以在n前面的结尾的最大值,加上an.

    二维方法:转化为一维来做。枚举长度为原矩阵长度的所有矩阵。然后压成一维来做。

    时间:

    因为有n个开头,每个开头有n-1,n-2......1个结尾,所以枚举的时间复杂度为o(n^2)。

    为了节省时间,利用预处理数组思想,定义长宽和原矩阵一样的矩阵gg。

    每列满足第n列k行的值为sum(l[0][n]+l[1][n]....l[k][n]),可以o(n*m)做到(nm为长宽).然后枚举到某矩阵的时候直接根据gg得出。整体做到o(n^2)枚举并求和。然后按一维做。整体o(n^3)

    三维:并没有什么高大上的优化,也是枚举每一个长宽固定的长方体,压缩至二维,然后按二维做。

     

    题目三:

    热身赛,并没有原题,手打。

    过的队伍不多

    一种动物,出生到死亡只有三年,即n年出生,n+3年死去。

    出生一年以后可以生育,也就是n+1年开始生育,一年可以生一只宝宝。

    定义第n年动物总数为an,给定n,返回an/a(n-1),最多保存小数点后十位

    第一年有一只

    思路一:定义f(n)为第n年新出生的动物个数,则f(n)=f(n-1)+f(n-2),前两项为1,而每年的总数也就是三项求和而已。

    每年出生的数量为1,1,2,3,5,8,13,21

    每年总数就是1,2,4,10,16,26,42

    发现是斐波那契数列

    思路二:直接从总数入手,定义f(n)为第n年的总数

    如何求出an/a(n-1):要看有多少动物能活到n年,活不到n年的也不能在第n年生育,活到n年的动物每人生一个,所以an就是二倍的能活到n年的动物。求此数方法很多,在此只说一个:

    f(n-1)-(1/2)f(n-3)

    去年的数量减去,去年还活着的今年就死了的数量。

    这个数乘二,得出答案f(n)=2f(n-1)-f(n-3),其实本质还是斐波那契,因为f(n-1)=f(n-2)+f(n-3),带入以后发现f(n)=f(n-1)+f(n-2)。

    式子写出来了,但是原题数据范围是10^1000,不能一项一项推过去。

    尝试发现,几十项之后,an/a(n-1)的十位小数之内都没有变过,所以当数字较大时直接输出第五十项即可。

    本题结束

    但是还有点别的东西想写

     

    斐波那契的美

    万物之美,总能找到斐波那契数列的规律。随着n的增加,an/a(n-1)越来越接近黄金分割

    手写了求解过程。可能写的不规范,但是就是表达这个意思。

     

    只要数列满足X(n) = X(n-1) + X(n-2),无论前两个值是多少,都满足黄金分割的条件,而斐波那契数列是最简单的特例:前两个元素均为1

    数学家还发现了费马大定理和这个数列的关系(费马大定理的证明,三百五十年),并应用到诸多领域(比如加密)。有兴趣自行了解。

     

    题目四:

    省赛,没有原题。十六支队伍过了这个题。

    https://blog.csdn.net/hebtu666/article/details/79964233

    参考我前面的文章,dp入门篇,那个会了这个就会。

    参考萌新题

    现场因为对c++不熟,没敢压空间,规规矩矩的写了一遍,还因为多打了一行罚了时,跟智障一样。。。

     

     

    题目五

    http://newoj.acmclub.cn/contests/1359/problem/6

    题意:最长公共子序列,要求序列每个元素重复k次,比如1122重复两次,111222重复三次。

    输入两个字符串和k,输出长度。

    最长公共子序列的一个变形。。。

    动态规划。设dp[i][j]表示a串处理到i位置,b串处理到j位置的答案。预处理出从a串i位置向前数,第k个与i位置数
    字相同的位置p[i],用相同方式处理出B串的q[i]。
    则转移方程为dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i-p[i]][j-q[j]]+1),其中第三种转移必须在a[i]=b[j]的情况下转移。

     

    #include <bits/stdc++.h>
    using namespace std;
    int k,n,m,dp[1005][1005];
    int a[1005],b[1005];
    int pa[1005]={0},pb[1005]={0};
    queue<int> q[1005];
    int main()
    {
        int ak; cin>>ak;
        while(ak--)
        {
            for(int i=1;i<=n;i++)
                while(!q[i].empty()) q[i].pop();
            scanf("%d%d%d",&k,&n,&m);
            memset(dp,0,sizeof(dp));
            memset(pa,0,sizeof(pa));
            memset(pb,0,sizeof(pb));
            for(int i=1;i<=n;i++) cin>>a[i];
            for(int i=1;i<=m;i++) cin>>b[i];
            for(int i=1;i<=n;i++)
            {
                q[a[i]].push(i);
                if(q[a[i]].size()==k)
                {
                    pa[i]=q[a[i]].front();
                    q[a[i]].pop();
                }
            }
            for(int i=1;i<=n;i++)
                while(!q[i].empty()) q[i].pop();
                
            for(int i=1;i<=m;i++)
            {
                q[b[i]].push(i);
                if(q[b[i]].size()==k)
                {
                    pb[i]=q[b[i]].front();
                    q[b[i]].pop();
                }
            }
            
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
                    if(a[i]==b[j] && pa[i]!=0 && pb[j]!=0)
                        dp[i][j]=dp[pa[i]-1][pb[j]-1]+k;
                }
            }
            printf("%d\n",dp[n][m]);
        }
        return 0;
    }

    代码都是比赛时候写的,真的不想找来贴了。

     

    最后总结经验教训:

     

    注意细节,注意细节,注意细节

    多种思路,多种思路,多种思路

    递归关系自己推,比如背包,你要是看套路。。。Emmm。。就连套路都不会用了。

    平时递归关系自己推,自己推,自己推。

     

    展开全文
  • (px to dp): dp = (int)(px / (displayMetrics.densityDpi / 160)); 但是不能运行,显示的不能被0整除. 我用如下方法实现dp到px的转换: px = (int)(dp * (displayMetrics.densityDpi / 160)); ...
  • 对于这个历史遗留性问题每次回头处理起来着实让人头疼 解决方案有以下几种 1.张鸿洋已经实现了并且在githup上的Android...至于字体大小或者控件高度,工具满天飞的现在设计师连dp都会给你标号的,是个Android程序

    对于这个历史遗留性问题每次回头处理起来着实让人头疼
    解决方案有以下几种
    1.张鸿洋已经实现了并且在githup上的AndroidAutoLayout
    但是担心不好维护最终还是老实使用回dp了。

    2.一般来说设计师只需要更你说我这个图是几倍图你就放在相应的drawable文件夹即可,AS会为你做剩下的事情。至于字体大小或者控件高度,工具满天飞的现在设计师连dp都会给你标号的,是个Android程序要都知道dp是适配所有屏幕的吧?那么第二问题也不存在了。讲道理做完这些你基本上就不需要考虑屏幕适配的问题了。

    也有特殊的情况 比如说手机屏幕上横向布局过多,这将造成什么呢?
    屏幕的内容被挤出屏幕了?还是你做了single=true 导致文字后面出现’…’
    解决方案:
    1.这个在目前的约束布局中似乎给出了解决方案(但目前不建议使用)
    2.我的解决方法是layout-sw720dp 这个是res文件夹下的一个布局文件意思是适配正常720P的手机屏幕写特定布局文件夹,一般一个项目里面不会有太多需要单独写的布局 除非设计师是个脑残。
    3.还有一种即为dimens适配方案,大多数我们也就是说说而已,因为这样的工作量不比布局适配轻松 在这里我强烈建议大家养好界面上只有引用,不能存在width = "48dp" color="#0ff"这样的代码,写的时候爽 维护起来想哭。 而且如果是合作开发的话,会慢慢的没有人愿意和你合作的哦。

    这里给推荐一个比较好的命名方式
    color="@color/color_#156665" dimen ="@dimen/space_10dp" dimen = "@dimen/font_size_14sp"
    这样非常容易维护和识别。

    相信大家看了 你的布局里没有随意布局参数而是整齐的引用的时候一定会对你刮目相看的

    以下为dimen适配的方案其实dimenTool这个工具类在几年前就有了 个人在项目中使用过一次 但是没有正正的遇到过屏幕适配的大问题。所以也只是留存在我的项目当中。前段时间客户说你的视频播放器控件存在黑边 我试过所有的手机后均没有发现黑边。在同事的提醒下我下载了一个夜神模拟器果然出现了传说中的黑边。
    真正的屏幕适配开始了
    dimenTool这个工具类似乎生成的工具参数有问题或者说根本就是错误的指引方式。不过值得借鉴
    在他的基础上我稍加修改,分享到我的有道上下载链接
    以下为正常情况能看到的资源文件
    以下为正常情况能看到的资源文件
    values-sw 为通用写法
    120 240 320 480 分别为160的
    0.75 1.5 2 3 所代表的为放大倍数

    • ldpi 120 dpi
    • mdpi 160 dpi
    • hdpi 240 dpi
    • xhdpi 320 dpi
    • xxhdpi 480 dpi

    还有 480P 720P 1080P 的概念
    一般情况下相同的尺寸和上面dpi是对应的
    灵感来源
    如果你自己思考了dpi和分辨率的关系的话,你会发现,他们的关系就是没有关系
    DPI:dots per inch,一英寸的像素数量,这个值是设备自己决定的,是写死的

    那么问题来了 “不正常情况呢?”
    比如说 1080P mdpi的屏幕 720P ldpi的屏幕
    第一个屏幕大小有电脑的三分之一 第二个和同样尺寸的720P手机比起来相当模糊
    这些都是不正常 的手机屏幕 一般不奇葩的话客户发现不了。

    用模拟器的朋友们注意了
    电脑屏幕一般都是一比一吧,也就是mdpi 也就是为什么自己的项目在手机上好好的到了模拟器(分辨率1080*1920)上就像压扁了一样
    values-sw480dp-port是很有必要的 这样可以强制拉伸到自己想要的大小。
    系统判定为480dpi但是找不到就只能引入低分辨率的values直到为默认values。

    一般设计师是为了照顾ios 会按照750P计算尺寸。Android就但当是720P的就行了 图片放在drawable-xhdpi

    说了这么多感觉自己仍然有些东西讲的不够清晰有关于分辨率的知识点感觉不是一次就能弄懂的。。做个笔记mark一下。

    关注公众号领取更多干货
    小码家公众号

    展开全文
  • dp2px px2dp

    万次阅读 2017-01-19 15:45:29
    /** * 将dp转换成px * @param context * @param dpValue * @return */ public static int dip2px(Context context,float dpValue){ final float scale = context.getResources ().g
  • 安卓dp转px,px转dp方法

    万次阅读 2018-06-06 15:35:04
    dp转px: /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().densit...
  • 区间dp入门

    万次阅读 多人点赞 2018-05-03 18:07:49
    什么是区间dp?顾名思义:区间dp就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的 最优解进而得出整个大区间上最优解的dp算法。二.核心思路既然让我求解在一个区间上的最优解,那么我把这...
  • 数位dp总结 之 从入门到模板

    万次阅读 多人点赞 2016-08-03 14:37:59
    数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数。所谓数位dp,字面意思就是在数位上进行dp咯。数位还算是比较好听的名字,数位的含义:一个数有个位、十位、百位、千位......数的每...
  • 一直都在网上找到很多用代码(基本就是同一个)进行dp跟px之间转换的代码,最近因工作需要,而我贪图便利以及省略适配,我试着把那个代码做成了一个自己用的小工具,在手机上安装从px转换成dp,用工具转换一下设计图...
  • 概率DP/期望DP总结

    千次阅读 多人点赞 2018-07-12 22:22:50
    一般来说,概率DP找到正确的状态定义后,转移是比较容易想到的。但状态一定是“可数”的,把有范围的整数作为数组下标。事实上,将问题直接作为状态是最好的。如问“n人做XX事的期望次数”,则设计状态为f[i]表示i...
  • dp[i][j]=dp[i][j]+dp[i-1][k]; if(dp[i][j]>=mod) dp[i][j]-=mod; } } } for(i=0;i;i++) { res=res+dp[n][i]; if(res>=mod) res=res%mod; } printf("%d\n",res); } int main() { int x; while...
  • Android手机屏幕px转dpdp转px工具类

    千次阅读 2015-06-04 15:35:37
    代码如下:import android.content.Context;public class DensityUtil { private static float scale... * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dip2px(Context context, float dpVal
  • 状态压缩dp(状压dp)

    万次阅读 多人点赞 2018-07-16 09:05:43
    状压dp是一类比较难理解的dp; 在讲状压dp之前,我们应该清楚所有的dp是解决多阶段决策最优化问题的一种思想方法; 请注意多阶段这三个字: 经过前面三种背包的学习,可以发现如何定义状态是解决动态规划最重要的...
  • 数位DP 题集

    千次阅读 2013-06-17 09:35:28
    数位DP 题集 /*-------------------------------------------------------------------------*/ 常用数位DP写法: int dfs(int i, int s, bool e) { if(i==-1) return s==target_s; if(!e && ~f[i][s...
  • am335系列的开发板,网口芯片用的是dp83640,现在整个网络可以运行,但是我想修改dp83640芯片寄存器的内容,以及关于dp83640的驱动程序,该怎么弄,像字符设备我们可以用open函数来打开这个设备,再用write等函数...
  • 经典DP 嵌套矩形

    千次阅读 2013-03-29 10:47:34
    dp初级入门必学,有南阳理工学院OJ的题在此:... 简单dp,刘汝佳白书第一本,161页。稍微理解下就会了。。很easy #include #include #include using namespace std; #define max(a,b) ((a)>(b)?(a):(b
  • map+DP leetcode446

    千次阅读 多人点赞 2018-10-29 16:04:19
    如果数字序列由至少三个元素组成并且任何两个连续元素之间的差异相同,则称为算术序列。 例如,这些是算术序列: 1,3,5,7,9  7,7,7,7  3,-1,-5,-9  以下序列是不算术。...给出了由N个数组成的零索引...
  • dp协议

    千次阅读 2019-06-29 19:34:00
    udp(发消息) - 在线播放视频\qq发消息\微信消息 不需要建立连接 就可以通信的 不占用连接\不可靠(消息因为网络不稳定丢失)\速度快 udp不会发生粘包 udp协议的多人通信 # socket(type=socket... ...
  • dp计算

    千次阅读 2017-04-20 16:25:07
    1.首先什么是dp?什么是px?dp和px有什么区别?dp与px之间的转换关系? 1.什么px?图像显示的基本单元,我们知道屏幕是由很多点组成的,因为点特别小,所以我们看起来就像是一片的。那其中的每一个点就是像素点,而px呢...
  • 计数dp

    千次阅读 2018-03-30 14:31:13
    i的情况,可以假设有一个大小为i的集合,dp[i][j-i]是对j-i的i划分,dp[i][j]的状态就可以从前者转移而来,即前者划分所对应的大小为i集合所有元素+1之后得到的新集合,可以保证这个新集合所有的元素都&gt;0;(也就...
  • DP总结

    千次阅读 2018-08-31 10:45:58
    DP总结 一. 本质 递归转递推。 二. 前提 问题具有最优子结构性质。如果问题的最优解所包含的 子问题的解也是最优的,我们就称该问题具有最优子结 构性质。 无后效性。当前的若干个状态值一旦确定,则...
  • 背包 dp

    千次阅读 2015-01-23 12:33:51
    #include #include #include using namespace std; int dp[100002]; int main() {  int n;  while(cin>>n,n!=0)  {  int a[1200];  memset(dp,0,sizeof(dp));  i
  • DP模式

    千次阅读 2013-09-16 14:10:47
    DP也练了一部分,找感觉。 说一下VIJOS上的。 ◆线性连接性的问题(包括分配问题,转换问题,连接问题,及宏观扩展),这样的例子比较多,方程就是由一维来记录处理到的线性位置作为阶段,然后用额外的未来...
  • 插头DP

    千次阅读 2014-03-07 13:20:17
    原文地址:http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710343.html 首先入门推荐的还是cdq的论文:《基于连通性状态压缩的动态规划问题》 ... 上面的论文关于插头和轮廓线等概念讲得很清楚...而
  • Android屏幕适配dp、px两套解决办法

    万次阅读 多人点赞 2016-08-26 09:55:11
    最新最全文章(2018-08-25):... “又是屏幕适配,这类文章网上不是很多了吗?” 我也很遗憾,确实又是老问题。但本文重点对网上的各种方案做一个简短的总结,和具体使用方法。 ...

空空如也

1 2 3 4 5 ... 20
收藏数 236,265
精华内容 94,506
关键字:

dp