当前位置: 代码迷 >> 综合 >> H - Dollar Dayz
  详细解决方案

H - Dollar Dayz

热度:6   发布时间:2023-11-22 03:46:28.0

H - Dollar Dayz

  

 分享原因:对高精度的处理,dp思想

elect Code
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
const int MAXN = 1E5+10;
const int  MOD = 1E6;
long long dp[10010];
long long u[10010];
int n,m; 
const long long  M=100000000000000000;
int main()
{while(cin>>m>>n){memset(dp,0,sizeof dp); u[0]=1;for(int i=1; i<=n; i++)for(int j=i; j<=m; j++){dp[j]+=dp[j-i];u[j]+=u[j-i];if(u[j]>=M){dp[j]+=u[j]/M;u[j]%=M;}}if(dp[m])cout<<dp[m];cout<<u[m]<<endl;} return 0;
}

这题感谢昌荣大佬的讲解,解释一下为什么不会溢出的原因,高低位分别储存了低十八位和高十八位的数字,当第十八位被更新时,由于u【j-i】和u【j】都是被取余后的结果,故相加后的值不会超过2e18 ,就可以以此来进行大小比较并进位。