這題dp,想明白了就可以了。
這就像個座標系一樣(好像本來就是。。。)
而在其上面,有很多個點。
咳咳,有點醜。
然後呢,我們就按照x座標排個序,y也順便排一下(第二關鍵字)
這樣子,在我們dp的時候,
或者說對於i,我們可以滿足a[i].x<=a[i+1…n].x
所以,我們就可以不記錄對於i點射向左邊的了。
而我們要記錄的,是它射向右邊的最上面的點(j),射向右邊的最下面的點(k),射向上面的最下面的點(l),射向下面的最上面的點(o)。
要轉移的話,我們便列舉當前點所射的方向。
我這裡設向上為0,向左為1,向下為2,向右為3。
然後判斷一下它是否合法即可,記得更新一下j,k,l,o。(詳細見標)
上標:
#include
#include
#include
#define ll long long
#define mo 998244353
using namespace std;
struct nodea[55]
;int n,b[55]
,f[2][
55][55
][55]
[55],x=
1,las=
0,t,tt;
bool bz[55]
[4];
ll ans=0;
inline
intread()
intcmp
(node x,node y)
intmain()
else
if(a[i]
.y==a[j]
.y) f[0]
[0][
0][0
][0]
=1;for
(int i=
1;i<=n;i++
)// i->1if(
!bz[i][1
]&&(a[i]
.y.y || l==0)
&&(a[i]
.y>a[o]
.y || o==0)
)// i->2if(
!bz[i][2
]&&(a[i]
.y.y || k==0)
)// i->3if(
!bz[i][3
])} las=x,x^=1
;for
(int j=
0;j)for
(int k=
0;k)for
(int l=
0;l)for
(int o=
0;o) f[x]
[j][k]
[l][o]=0
;}for(
int j=
0;j<=n;j++
)for
(int k=
0;k<=n;k++
)for
(int l=
0;l<=n;l++
)for
(int o=
0;o<=n;o++
) ans+
=f[las]
[j][k]
[l][o]
;printf
("%lld\n"
,ans%mo)
;return0;
}
五校聯考3day2 C
description 在遠古的yl國大地上,有n個祭壇,每個祭壇上四個方向寫有 艄 毜 鼛 甌 四個大字,其實這在yl國古代分別是 東 南 西 北 的意思。yl國每年都要舉行祈福消災的祭祀活動,這個時候,每個祭壇都要在艄毜鼛甌四個方向中選乙個方向,祭壇將向這個方向發出一道 的光線,如果兩個祭壇發出...
五校聯考3day2 C
目錄 description input output sample input sample output data constraint 題解 在遠古的yl國大地上,有n個祭壇,每個祭壇上四個方向寫有 艄 毜 鼛 甌 四個大字,其實這在yl國古代分別是 東 南 西 北 的意思。yl國每年都要舉行...
五校聯考3day2 A
這題考場考慮不太全 但相比於60,其它90分的人,還是很全的 long long我是開了的,然後後面的特判我也是加了的,可是竟然打錯了?其實這題不需要打的像我這樣麻煩 設a i 表示i點還需連線的邊數 ans表示sigma a i max表示max a i 如果max ans 2,就說明全部連項那個...