题意:给一个数,用题目给的5个数任意相加使得等于那个数,输出有多少种
完全背包问题,状态转移方程dp[i]=dp[i]+dp[i-a[j]];a[j]是5个数的一个。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
const int m = 10000;
int main()
{
int dp[m];
int sum;
int h=0;
int a[5]={50,25,10,5,1};
while(~scanf("%d",&sum))
{
memset(dp,0,sizeof(dp));
dp[0]=1;
for(int i=0;i<5;i++){
for(int j=a[i];j<=sum;j++){
dp[j]=dp[j]+dp[j-a[i]];
}
}
cout << dp[sum] << endl;
}
}