wa#4
测试点 1 1 0 0 4 8
输出 83
答案也是83
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int n;
int dp[10005];
struct node{
int shuzhi;
int num;
}fm[10];
void solve()
{
int sum=0;
for(int i=1;i<=6;i++)
{
int x;
cin>>x;
// cout<<sum<<endl;
if(i==1)fm[i].shuzhi=1,fm[i].num=x,sum+=x;
else if(i==2)fm[i].shuzhi=2,fm[i].num=x,sum+=2*x;
else if(i==3)fm[i].shuzhi=3,fm[i].num=x,sum+=3*x;
else if(i==4)fm[i].shuzhi=5,fm[i].num=x,sum+=5*x;
else if(i==5)fm[i].shuzhi=10,fm[i].num=x,sum+=10*x;
else if(i==6)fm[i].shuzhi=20,fm[i].num=x,sum+=20*x;
}
// cout<<sum<<endl;
dp[0]=1;
// if(sum==203){
// cout<<"Total=83";
// return ;
// }
for(int i=1;i<=6;i++)
{
for(int j=sum;j>=fm[i].shuzhi;j--)
{
for(int k=0;k<=fm[i].num;k++)
{
dp[j]|=dp[j-k*fm[i].shuzhi];
}
}
}
// for(int i=1;i<=6;i++)
// {
// for(int j=1;j<=sum-fm[i].shuzhi;j++)
// {
// for(int k=0;k<=fm[i].num;k++)
// {
// dp[j]|=dp[j+k*fm[i].shuzhi];
// // cout<<j<<" "<<dp[j]<<endl;
// }
// }
// }
int ans=0;
for(int i=1;i<=sum;i++)
{
if(dp[i])ans++;
}
// Total=83
// cout<<ans<<endl;
cout<<"Total="<<ans;
}
signed main()
{
ios::sync_with_stdio();
cin.tie(0);
cout.tie(0);
solve();
return 0;
}