纪念一下刷题量破百的倍数的日子

07 27

第四百道是用sbDP A的。。。

f[0][500][500]=1;
    int p=0;
    F(i,1,n){
        p^=1;
        F(j,1,999){
            f[p][j][500]=(f[p^1][j-1][500]+f[p^1][j+1][500])%mod;
            f[p][500][j]=(f[p^1][500][j-1]+f[p^1][500][j+1])%mod;
        }
        f[p][500][500]=(f[p^1][501][500]+f[p^1][499][500])%mod+(f[p^1][500][499]+f[p^1][500][501])%mod;
        f[p][500][500]%=mod;
        f[p][0][500]=f[p^1][1][500];
        f[p][500][0]=f[p^1][500][1];
        f[p][1000][0]=f[p^1][999][500];
        f[p][0][1000]=f[p^1][0][999];
    }
    printf("%d",f[n&1][500][500]);
View Code

 0907

第五百道是考试时候A的。考完以后挺长时间才发现自己都502了hhh

运用了数学课上自己去讲的一道题的小性质。路丽姐姐教你组合数。

测试39:工业题

#include<bits/stdc++.h>
#define F(i,a,b) for(rg int i=a;i<=b;++i)
#define rg register
#define LL long long
#define il inline
#define pf(a) printf("%lld ",a)
#define phn puts("")
using namespace std;
#define int LL
#define N 600010
int read();
int n,m,a,b;
int f[600010],g[600010],jc[N<<1],inv[N<<1],aj[N<<1],bj[N<<1];
const int mod=998244353;
il int qpow(int x,int k){x%=mod;int s=1;for(;k;x=x*x%mod,k>>=1)if(k&1)s=s*x%mod;return s;}
il int C(int a,int b){
    if(b>a)return 0;
    return jc[a]*inv[b]%mod*inv[a-b]%mod;
}
signed main(){
//    freopen("a_sample2.in","r",stdin);
    n=read();m=read();a=read()%mod;b=read()%mod;
    jc[0]=1;
    F(i,1,n+m)jc[i]=jc[i-1]*i%mod;
    inv[n+m]=qpow(jc[n+m],mod-2);
    for(int i=n+m;i>=1;--i)inv[i-1]=inv[i]*i%mod;
    aj[0]=bj[0]=1;
    F(i,1,n+m)aj[i]=aj[i-1]*a%mod,bj[i]=bj[i-1]*b%mod;
    rg int x=0,ans=0;
    F(i,1,n){
        x=read()%mod;
        ans+=x*C(m-1+n-i,m-1)%mod*aj[m]%mod*bj[n-i]%mod;
        ans%=mod;
    }
    F(i,1,m){
        x=read()%mod;
        ans+=x*C(n-1+m-i,n-1)%mod*aj[m-i]%mod*bj[n]%mod;
        ans%=mod;
    }
    printf("%lld\n",ans);
}
il int read(){
    int s=0;char ch;
    while(ch=getchar(),!isdigit(ch));
    for(;isdigit(ch);s=s*10+(ch^48),ch=getchar());
    return s;
}
/*
g++ 1.cpp -g
./a.out
4 4 3 2
1 3 5 7
2 4 6 8


*/
/*
int ans=0;
    ans+=8*16;
    ans+=6*5*16*3;
    ans+=4*15*16*9;
    ans+=2*35*16*27;
    ans+=1*35*8*81;
    ans+=3*15*4*81;
    ans+=5*5*2*81;
    ans+=7*1*81;
    pf(ans);
*/
View Code

 

转载于:https://www.cnblogs.com/seamtn/p/11254961.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值