其实就是简单题,这题条件这么苛刻,就应该非常简单。
很多思路很快就可以看出,首先一个点i只可能存在到i+1,到n的路径。对于判断i->j是否有一条边的时候,如果我们已经知道了i->i+1,i->i+2…i->j-1这些边是否存在,那么如果存在的话,i->j就会多a[k][j]个方案,总和不为a[i][j]的时候,就说明i->j有一条边。
开始的时候傻了,加了一条
没有用的判读,因为a数组存储的只是最后一位,如果为0不代表没有路径。另外为什么可以直接减后判断是否有路径,因为如果有,只会在这两点已经计算的路径数上加一而已,这个影响在数位的最后一位就能体现。
#include <bits/stdc++.h>
#define LL long long
const int maxn = 505;
using namespace std;
int a[maxn][maxn]={
0};
int num[maxn][maxn]={
0}