易水飞霜 level
获赞
7
粉丝
1
关注
0
看过 TA
1
동명대학교
2018
算法工程师
IP属地:未知
迷茫的时候就来刷题
私信
关注
/* 首先,假如本题的钱只有1、2两个面值,那么对应n元人民币,有n/2+1种兑换方法(两元可以有有0、1、2、3、4、5……n/2张,一共n/2+1种) 增加5元面值的钱币,则需要在上面思路的基础上,算出5元最多可以换n/5张。循环计算当5元有i张时,剩余n-5*i元人民币,带入上方公式,累加即可。 本算法如果在面值种类多时,需要多重循环。n种面值需要n-2重循环。不确定是否有其他算法能更优化 */ #include<stdio.h> int main() {     int n,m,p,i,ans;     scanf("%d"...
Clouder0:种类较多可以考虑用背包的思路来解,对每种面值跑分组背包。复杂度大概为$O(nm^2)$,$n$为物品种数,$m$为值域。 ```cpp const int maxn = 10000; const int maxm = 510; int n,m; int f[maxm],w[maxn]; int main() { read(n),read(m);//nm^2 for(int i = 1;i<=n;++i) read(w[i]); f[0] = 1; for(int k = 1;k<=n;++k) for(int i = m;i;--i) for(int j = i / w[k];j;--j) f[i] += f[i - j * w[k]]; printf("%d\n",f[m]); return 0; } ```
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务