EOJ 3297 鋪瓷磚 (dfs,記憶化)

2021-08-15 15:14:33 字數 1758 閱讀 4952

time limit per test: 2.0 seconds

memory limit: 256 megabytes

章魚王的行宮要鋪瓷磚了。 

行宮中有一長度為 n(n≤30) 的地板,給定三種不同瓷磚:一種長度為1,一種長度為2,另一種長度為3,數目不限。

要將這個長度為 n 的地板鋪滿,並且要求任意兩個相鄰的瓷磚長度均不等,一共有多少種不同的鋪法?在所有的鋪設方法中,一共用了長度為1的瓷磚多少塊?

例如,長度為4的地面一共有如下3種鋪法,並且,一共用了長度為1的瓷磚4塊:

4=1+2+1

4=1+3

4=3+1

input

第一行乙個整數 t(t≤30),表示測試組數。

接下來 t 行,每行只有乙個數 n(n≤30),代表地板的長度

output

對於每一組資料第一行有乙個數,代表所有不同的瓷磚鋪放方法的總數。

第二行也有乙個數,代表這些鋪法中長度為1的瓷磚的總數

examples

input

1 4

output 3 4

分析:記憶化搜尋

n過大時,記憶化防t

#include 

using

namespace

std;

#define mem(a,n) memset(a,n,sizeof(a))

#define memc(a,b) memcpy(a,b,sizeof(b))

#define rep(i,a,n) for(int i=a;i///[a,n)

#define dec(i,n,a) for(int i=n;i>=a;i--)///[n,a]

#define pb push_back

#define fi first

#define se second

#define io ios::sync_with_stdio(false)

#define fre freopen("in.txt","r",stdin)

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

double pi=acos(-1.0);

const

double e=2.718281828459045;

const

double eps=1e-8;

const

int inf=0x3f3f3f3f;

const

int mod=258280327;

const

int n=30+5;

const ll maxn=1e6+5;

const

int dir[4][2]= ;

int f[n][2],cnt,ans;

void dfs(int sum,int pre,int num)

rep(i,1,4)

}}int main()

ans=cnt=0;

dfs(n,0,0);

f[n][0]=ans,f[n][1]=cnt;

printf("%d\n%d\n",ans,cnt);

}return

0;}

EOJ 莫干山奇遇

出題人當然是希望出的題目有關oxx,於是想方設法給題目配上一些有關oxx的背景故事,使得它看起來不那麼無趣。但有的時候卻無法引入合適的小姐姐,使得oxx顯得非常可憐。所以出題人刪除了故事,只留下乙個枯燥乏味的數學問題。故事已刪除 給乙個長度為n的序列a1,a2,an,求乙個長度為m的序列b1,b2,...

EOJ 2794 鍊錶

大概是在10000 10的矩陣裡找兩行,兩列,使得兩行中的對應列是相同的。思路 在長列中hash,建立hash陣列,表示這個hash i 的i前乙個位置,建立鍊錶next i 指向hash value i 這樣就能o n 的找到所有相同的數的乙個鍊錶。然後搜尋兩列的時候比較當前指向的位置,當前比較短...

EOJ 3256 拼音魔法

time limit per test 1.0 seconds time limit all tests 1.0 seconds memory limit 256 megabytes 魔法學校小學一年級有一種題。就是給乙個字的拼音,給乙個聲調,讓你正確地注音。但魔法老師給了巨量的題,你不用魔法根本不...