Zero Path

该博客讨论了如何使用动态规划解决一个关于在含有-1和1的矩阵中从左上角走到右下角,路径和可能为0的问题。作者提出了两种不同的DP解决方案,一种是通过bitset进行空间优化,另一种是寻找最小值和最大值来判断0是否可达。这两种方法都涉及到对路径和的连续变化性质的利用。

Zero Path

Problem - C - Codeforces

题意

给你一个 n × m n\times m n×m的只含 − 1 / 1 -1/1 1/1的矩阵,每次只能向右或向下走,问你从左上角走到右下角的路径权值和是否可能为 0 0 0

思路

  • d p dp dp

有一个暴力 d p dp dp的想法设 f [ i ] [ j ] ] [ k ] f[i][j]][k] f[i][j]][k]:表示走到 ( i , j ) (i,j) (i,j)且和为 k k k的情况,但是空间太大时间也太复杂了,这个时候可以用到 b i t s e t bitset bitset来优化以下用每一位来表示一个数,这个时候如果开数组还是空间还是太大了,因此仿照背包优化的方法,我们把 i i i这一维砍去,即从前往后枚举 j j j的时候每次先向 ( i , j + 1 ) (i,j+1) (i,j+1)转移再向 ( i + 1 , j ) (i+1,j) (i+1,j)转移,这样就能保证每次操作的时候都是前一维的状态了,时间复杂度会砍 1 / 30 1/30 1/30左右,因此暴力可过了

Code

降维

#include <bits/stdc++.h>
#define x first
#define y second
#define debug(x) cout<<#x<<":"<<x<<endl;
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 1e5 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8, pi = acos(-1), inf = 1e20;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {
    e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
int d = 2001;
int a[1010][1010];
bitset<4020> f[1010];
int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    int T;
    cin >> T;
    while (T -- ) {
        cin >> n >> m;
        for (int i = 1; i <= n; i ++) 
            for (int j = 1; j <= m; j ++)
                cin >> a[i][j];
        for (int i = 1; i <= m; i ++)  f[i].reset();
        f[1][d+a[1][1]] = true;
        for (int i = 1; i <= n; i ++)
            for (int j = 1; j <= m; j ++) {
                if (j + 1 <= m) {
                    if (a[i][j + 1] == -1) f[j + 1] |= (f[j] >> 1);
                    else f[j + 1] |= (f[j] << 1);
                }
                if (i + 1 <= n) {
                    if (a[i + 1][j] == -1) f[j] >>= 1;
                    else f[j] <<= 1;
                }
            }

        cout << (f[m][d] ? "YES" : "NO") << '\n';                
    }
    return 0;
}

如果你在里边开二维 v e c t o r vector vector的话是不会爆空间的

思路

  • 思维, d p dp dp

考虑首先 n + m − 1 n+m-1 n+m1一定是个偶数,否则 + 1 , − 1 +1,-1 +1,1不可能变成零,我们 d p dp dp出左上角到右下角的最小值和最大值,如果 0 0 0在它们中间就一定有解,因为对于最大值你每次扭以下路径要不不变要不减小中间一定会减到 0 0 0,换句话说类似于零点定理,由于我们的值是连续变化的,因此 0 0 0如果在最大值和最小值之间,则一定有一种方法变成 0 0 0

Code

#include <bits/stdc++.h>
#define x first
#define y second
#define debug(x) cout<<#x<<":"<<x<<endl;
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 1e5 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8, pi = acos(-1), inf = 1e20;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {
    e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
int d = 2001;
int a[1010][1010];
int b[1010][1010], c[1010][1010];

int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    int T;
    cin >> T;
    while (T -- ) {
        cin >> n >> m;
        for (int i = 1; i <= n; i ++) 
            for (int j = 1; j <= m; j ++)
                cin >> a[i][j], b[i][j] = c[i][j] = 0;

       
        if ((n + m - 1) & 1) {
			cout << "NO\n";
			continue ;
		}
        for (int i = 1; i <= n; i ++)
            for (int j = 1; j <= m; j ++) {
                if (a[i][j] == -1) {
                    b[i][j] += max(b[i - 1][j], b[i][j - 1]) + 1;
                    c[i][j] += max(c[i - 1][j], c[i][j - 1]);
                }
                else {
                    b[i][j] += max(b[i - 1][j], b[i][j - 1]);
                    c[i][j] += max(c[i - 1][j], c[i][j - 1]) + 1;
                }                
            }
 
        if (b[n][m] >= (n + m - 1) / 2 && c[n][m] >= (n + m - 1) / 2) cout << "YES\n";
        else cout << "NO\n";                        
    }
    return 0;
}
### 回答1: Pathloss zero是指在无线通信中信号传输过程中所遭受的最小损耗。它通常与传输距离和频率有关,可以用来评估无线信号的强度和信噪比。在移动通信中,Pathloss zero是一个非常重要的性能参数,它会直接影响到通信系统的覆盖范围和信号质量。一个低Pathloss zero值的系统可以提供更好的覆盖范围和更强的信号质量,从而提高通信的可靠性和效率。 ### 回答2: Pathloss zero是指移动通信中的路径损耗为零。路径损耗是指无线信号在传播过程中由于空间距离、障碍物、信号衰减等因素造成的信号强度减弱。而Pathloss zero表示在特定的情况下,信号不会因为传输距离而减弱至零。 在移动通信中,Pathloss zero对应的性能是信号强度。在无线通信中,信号强度是衡量信号传播质量和覆盖范围的重要指标。Pathloss zero的实现意味着信号在传播过程中不会减弱至零,保证了通信的可靠性和稳定性。在实际应用中,移动通信系统通过优化网络布局、信号增强技术(如天线增益、功率控制等)、信道编码等手段,尽可能降低路径损耗,提高信号强度。这样可以确保移动用户获取到足够的信号强度,实现正常的通信功能,避免通信中断或通话质量差的问题。 总之,Pathloss zero是移动通信中与信号强度相关的性能,它是保证移动通信质量的关键指标之一。通过优化网络设计、信号增强技术等手段来降低路径损耗,提高信号强度,以确保移动用户在通信过程中获得稳定、可靠的信号并实现良好的通信体验。 ### 回答3: Pathloss zero是指无线信号在传输过程中所遭受的无线传输损耗,在移动通信中,它是指信号在传播过程中的衰减,也即无线信号在传输距离增加时所遭受的减弱现象。 在移动通信中,Pathloss zero是一个重要的性能指标,它反映了无线信号在传输过程中所面临的衰减和损失。Pathloss zero的大小直接影响到信号强度和质量,因而对于通信链路的建立和维持至关重要。 随着信号传输距离的增加,Pathloss zero将会导致信号的衰减,从而使信号强度逐渐减弱。这意味着在一定的传输距离下,信号的质量将大大降低,甚至无法进行有效的通信。因此,Pathloss zero的减小对于提高通信系统的覆盖范围和传输能力具有重要意义。 为了应对Pathloss zero的影响,移动通信领域常常采取一系列的增强措施。例如,可以通过增加发射功率来弥补信号的衰减,或者利用天线增益来增强信号的强度。同时,还可以利用信号传输技术的改进,例如采用多天线传输技术(MIMO)来提升信号的可靠性和传输速率。 综上所述,Pathloss zero对应于移动通信中的信号衰减和损失性能,它直接影响到无线信号的传输质量和覆盖范围。在移动通信系统的设计和优化中,需要充分考虑和降低Pathloss zero的影响,以提高无线信号的传输能力和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值