국왕 기우기

4447 단어
%5: 교정을 죽일 수 있다고 착각한 결과%의 의미에서 유일한 것을 풀 수 없기 때문에 귀축식 좋은 문제 + 다항식 흑과학 기술을 풀 수 없다.%15: 다항식이나 dp를 이용할 수 있다. dp를 고려하면 보통 한 식을 만들어서 서로 밀어야 한다. 교묘하다. 세 가지 중요한 해법이 있는데 그것이 바로 1,2비트의 dp와 다항식 특징을 관찰하는 지식점이다.식 문제 구조 그리고 dp2.교란법을 채택하여 지수나 저수에 대해 교란하고 주로 상하계를 교란하며 차질을 빚는다.dp는 배증을 고려할 수 있다.반드시 문제를 꼼꼼히 풀어야 한다. m=1이라는 점을 소홀히 해서 오랫동안 조정했다. (뒤집을 때*(m-1) 사실은 나의 절차가 처음부터 문제없었다는 것을 증명한다.모형을 추출하는 것은 매우 문제가 생기기 쉽다. 모형을 추출하는 습관을 바꾸는 것%5: 흑과학 기술 다항식, 설마%25:1.교란법은 구체적으로 응용한다(두 가지).구조식 다음에 서로 뒤집는 방법% 50: 코드
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#define N 200
using namespace std;
typedef long long ll;
ll n,m,c[N+5][N+5],x,f[N+5],P=1000000007,x1,x2;
ll pow_mul(ll a,ll b){
    ll r = 1, base = a;
    for (ll k = b; k ; k>>=1){
        if (k&1) r=r*base%P;
        base=base*base%P; 
    }
    return r;
}

void init(){
    cin>>n>>m;
    memset(c,0,sizeof(c));
    for (int i = 0; i <= N; ++i) c[i][0]=1; 
    for (int i = 1; i<= N; ++i)
      for (int j = 1; j <= i; ++j){
         c[i][j]=c[i-1][j]+c[i-1][j-1];
         if (c[i][j]>=P) c[i][j]-=P;
      }
    x1 = pow_mul(m - 1, P - 2);
    x2 = pow_mul(m , n + 1);
}

void dp(){
    ll d = n,flag;
    f[0] = (x2-m) * x1 % P;
    if (f[0]<0) f[0]+=P;
    //cout<<f[0]<<endl;
    for (int i = 1;i <= m; ++i){
      f[i]= x2 * d % P;
      d = d * n % P;
      for (int j = 0; j < i; ++j){
        flag=1;
        if ((i-j)%2==1) flag = -1; 
        f[i] = (f[i]+c[i][j]*flag*f[j]%P)%P;
        if (f[i]<0) f[i]+=P;
         }
      f[i] = f[i] * x1 % P;
    } 
}

void print(){
    if (m==1) cout<<n*(n+1)/2%P<<endl; 
    else cout<<f[m]<<endl;
    //for (int i=0; i<=m;++i) cout<<f[i]<<endl;
}

int main(){
   init();
   dp();
   print();
   return 0;
} 

좋은 웹페이지 즐겨찾기