BZOJ1002 윤상 바이러스
6877 단어 문제풀이
카탈로그
결론
주동 2007년 합숙팀 논문의 일부 신기한 이론에서 알 수 있듯이 i개 점의 생성 나무 개수의 추이식 형식은 dp[i]=3∗dp[i-1]--dp[i-3]+2]+2이기 때문에 함부로 하면 된다.
코드
#include
#include
#include
#include
using std::max;
using std::cout;
using std::ostream;
using std::memset;
const int MAXN=105;
int n;
class bigNum{
private:
int c[MAXN];
public:
bigNum(){memset(c,0,sizeof(c));}
void init(int len,int x){
c[0]=len,c[1]=x;
}
friend bigNum operator+ (const bigNum &a,const int b){
bigNum c;
c.c[1]=b;
for(int i=1;i<=a.c[0];++i){
c.c[i]+=a.c[i];
c.c[i+1]+=c.c[i]/10;
c.c[i]%=10;
}
c.c[0]=a.c[0];
if(c.c[c.c[0]]>9){
c.c[c.c[0]+1]+=c.c[c.c[0]]/10;
c.c[c.c[0]]%=10;
++c.c[0];
}
return c;
}
friend bigNum operator- (const bigNum &a,const bigNum &b){
bigNum c;
for(int i=1;i<=a.c[0];++i){
c.c[i]+=a.c[i]-b.c[i];
if(c.c[i]<0){
c.c[i]+=10;
--c.c[i+1];
}
}
c.c[0]=a.c[0];
while(c.c[c.c[0]]==0) --c.c[0];
return c;
}
friend bigNum operator* (const bigNum &a,const int b){
bigNum c;
for(int i=a.c[0];i;--i){
c.c[i]=a.c[i]*b;
c.c[i+1]+=c.c[i]/10;
c.c[i]%=10;
}
c.c[0]=a.c[0];
while(c.c[c.c[0]]>9){
c.c[c.c[0]+1]+=c.c[c.c[0]]/10;
c.c[c.c[0]]%=10;
++c.c[0];
}
while(c.c[c.c[0]+1]) ++c.c[0];
return c;
}
friend ostream& operator<< (ostream &out,const bigNum &a){
for(int i=a.c[0];i;--i)
putchar(a.c[i]|'0');
return out;
}
}dp[MAXN];
int main(){
scanf("%d",&n);
dp[1].init(1,1);
dp[2].init(1,5);
for(int i=3;i<=n;++i)
dp[i]=dp[i-1]*3-dp[i-2]+2;
cout<return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
49일차 - 2022.04.20Baekjoon에서 문제풀이 1) 문제 : 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제/ 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 첫째 줄부터 N번째 줄까지 차례대로 별...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.