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 魔法學校小學一年級有一種題。就是給乙個字的拼音,給乙個聲調,讓你正確地注音。但魔法老師給了巨量的題,你不用魔法根本不...