HDOJ 钱币兑换

来源:互联网 发布:同一网络的打印机安装 编辑:程序博客网 时间:2024/04/30 15:48

点击打开链接
需要满足的条件 k1 + 2 * k2 + 3 * k3 = n原理:先确定硬币3的个数k3,每一个k3都能确定剩下的硬币换取方案,且不重复k3确定之后k1, k2只需要满足 k1 + 2 * k2 = n - 3 * k3而满足这样的任意一个k2对应了一个k1,k2的范围为 0...(n-3 * k3) / 2,一共有(n-3 * k3) / 2 + 1 个
#include<stdio.h>int main(){int n;while (scanf("%d", &n) == 1){int sum = 0;for (int i = 0; i <= n / 3; i++){sum += (n - 3 * i) / 2 + 1;}printf("%d\n", sum);}}

当(n-3*k)/2之后,2的情况为1---(n-3*k)/2缺少2为0的情况所以每次加1
例如n=6:
当i=0,即n构成中没取三时,2有3种情况的取法,但还有一种全为一的情况,共4种情况
当i=1,即n构成中有一个三,(6-3*1)/2=1,即最多一个2构成,再加上一个没有2的情况,共2种情况
当i=2时,n全为3构成,但是有条件(6-3*2)/2=0,所以应加一。。。。
即’+1‘的意思每种取三不同的方法中,加上一个不含2的情况

原创粉丝点击