标签:using color 最大 改变 can 输出 ret 价值 cst
算法
设f[j]表示面值为j的最大方案数, 如果f[j-k*a[i]]!=0则f[j]=f[j]+f[j-k*a[i]],
当1<=i<=n,m>=j>= a[i],1<=k<=j / a[i]。
#include<cstdio>
int m, n;
int a[1001];
long long f[10001];
int main()
{
scanf("%d%d",&n,&m);
for (int i = 1; i <= n; i++)
scanf("%d",&a[i]);
f[0] = 1;
for (int i = 1; i <= n; i++)
for (int j = m; j >= a[i]; j--)
for (int k = 1; k <= j / a[i]; k++)
f[j] += f[j-k*a[i]];
printf("%lld",f[m]);
return 0;
}
【算法分析2】 设f[j]表示面值为j的总方案数,如果f[j-a[i]]!=0则f[j]=f[j]+f[j-a[i]],1<=i<=n,a[i]<=j<=m。 【参考程序2】 #include<cstdio> using namespace std; int n, m; int a[101]; long long f[10001]; int main(){ scanf("%d%d",&n,&m); for (int i = 1; i <= n; i++) scanf("%d",&a[i]); f[0] = 1; for (int i = 1; i <= n; i++) for (int j = a[i]; j <= m; j++) f[j] += f[j-a[i]]; printf("%lld",f[m]); return 0; }
标签:using color 最大 改变 can 输出 ret 价值 cst
原文地址:http://www.cnblogs.com/z360/p/6719171.html