RGB项链问题
http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4369
Description
人稱AC之神的QIGe最近一直忙著培養(yǎng)NOI高手,為了鼓勵(lì)NOI高手, QiGe做了若干雨花石項(xiàng)鏈,作為對(duì)表現(xiàn)優(yōu)秀的選手的獎(jiǎng)勵(lì).他會(huì)挑選一個(gè)雨花石作為這串項(xiàng)鏈的開始,然后一個(gè)接一個(gè)連起來(lái),現(xiàn)在他有三種顏色的雨花石,紅(Red)、綠(Green)、藍(lán)(Blue),做項(xiàng)鏈的時(shí)候他要求每相鄰的2個(gè)雨花石不能相同的顏色,盡管最后一步把首尾連接起來(lái)的工作QiGe不需要去做,但也必須保證首尾2個(gè)雨花石它們是不同顏色。你知道QiGe有多少種串項(xiàng)鏈的方法嗎?
Input
輸入數(shù)據(jù)包含多個(gè)測(cè)試實(shí)例,每個(gè)測(cè)試實(shí)例占一行,由一個(gè)整數(shù)N組成,(0<n<=50)。
Output
對(duì)于每個(gè)測(cè)試實(shí)例,請(qǐng)輸出全部的滿足要求的排法,每個(gè)實(shí)例的輸出占一行。
Sample Input
1 2Sample Output
3 6 #include <bits/stdc++.h> using namespace std; long long a[100]; //涂三色 相鄰和收尾不得相同色; // 思路: 前四個(gè)會(huì)因?yàn)閿?shù)量不受大規(guī)律 // n>=4時(shí),第n-1個(gè)與第一個(gè)不相同時(shí),則為f(-1) 相同時(shí) :則第n個(gè)有兩種不同于第一個(gè)的可能此時(shí)為f(n-2)2 故的規(guī)律 int main() {int n,i,j;a[1]=3;a[2]=6;a[3]=6;a[4]=18;for(i=5;i<=51;i++){a[i]=a[i-1]+2*a[i-2];}while(scanf("%d",&n)!=EOF){printf("%lld\n",a[n]);} return 0; }進(jìn)階版
RGBP
http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4375
Description
人稱AC之神的QIGe最近一直忙著培養(yǎng)NOI高手,為了鼓勵(lì)NOI高手, QiGe做了若干雨花石項(xiàng)鏈,作為對(duì)表現(xiàn)優(yōu)秀的選手的獎(jiǎng)勵(lì).他會(huì)挑選一個(gè)雨花石作為這串項(xiàng)鏈的開始,然后一個(gè)接一個(gè)連起來(lái),現(xiàn)在他有四種顏色的雨花石,紅(Red)、綠(Green)、藍(lán)(Blue)、紫色(Pink),做項(xiàng)鏈的時(shí)候他要求每相鄰的2個(gè)雨花石不能相同的顏色,盡管最后一步把首尾連接起來(lái)的工作QiGe不需要去做,但也必須保證它們是不同顏色。你知道QiGe有多少種串項(xiàng)鏈的方法嗎?
Input
輸入數(shù)據(jù)包含多個(gè)測(cè)試實(shí)例,每個(gè)測(cè)試實(shí)例占一行,由一個(gè)整數(shù)N組成,(0 < n <= 30)。
Output
對(duì)于每個(gè)測(cè)試實(shí)例,請(qǐng)輸出全部的滿足要求的排法,每個(gè)實(shí)例的輸出占一行。
Sample Input
1 2Sample Output
4 12HINT
?
Source
爆搜找規(guī)律
#include <bits/stdc++.h> using namespace std;long long a[1007],b[1008]; long long ans=0; void bfs(int k,int c){if(k==c+1){if(b[1]!=b[c]||c==1)ans++;return;}for(int i=1;i<=4;i++){if(k==1||b[k-1]!=i){b[k]=i;bfs(k+1,c); }}}int main() {for(int i=1;i<=31;i++){ans=0;bfs(1,i);printf("%d %lld\n",i , ans);} return 0; }得到規(guī)律f【n】=2*f【n-1】+3*f【n-2】
#include <bits/stdc++.h> using namespace std;long long a[1007],b[1008]; int main() {int n,i,j;a[1]=4;a[2]=12;a[3]=24;a[4]=84;a[5]=240;for(i=6;i<=39;i++){a[i]=2*a[i-1]+3*a[i-2];} while(scanf("%d",&n)!=EOF){printf("%lld\n",a[n]);}return 0; }?
總結(jié)
- 上一篇: Songs Compression
- 下一篇: Ehab and a 2-operati