题目链接
数据超过范围时的处理方法
1.原理
假定a>b,且b是10的倍数,则a由a/b和a%b组成
2.代码
本题中代码联系了背包问题,对于dp的每一个状态,都有可能超过long long,因此要对每一个状态都进行数据处理,都要进行同样的操作。
#include<iostream>
using namespace std;
#define ll long long
const ll inf=1e18;
int main()
{
int n,k;
while(cin>>n>>k){
ll dp[1005]={0},a[1005]={0};
dp[0]=1;
for(int i=1;i<=k;i++){
for(int j=i;j<=n;j++){
a[j]=a[j]+a[j-i]+(dp[j]+dp[j-i])/inf;
dp[j]=(dp[j]+dp[j-i])%inf;
}
}
if(a[n])cout<<a[n];
cout<<dp[n]<<endl;
}
return 0;
}