洛谷P8614波动数列题解

原题传送门:

P8614 [蓝桥杯 2014 省 A] 波动数列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

分析:

分析完毕,上代码:

#include<iostream>

#include<vector>

using namespace std;

const int MOD=100000007;

int main(){

       int n,s,a,b;

       cin>>n>>s>>a>>b;

       vector<vector<int>> dp(n+1,vector<int>(n,0));//dp[i][j]表示下标为1~i

       dp[0][0]=1;

       auto mod=[](int a,int n){

              return (a%n+n)%n;

       };

       for(int i=1;i<=n;i++){

              for(int j=0;j<n;j++){//mod(s-(n-i)*a是求上一次的j

                     dp[i][j]=(dp[i-1][mod(j-(n-i)*a,n)]+dp[i-1][mod(j+(n-i)*b,n)])%MOD;

              }

       }

       cout<<dp[n-1][mod(s,n)]<<endl;

       return 0;

}

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值