Cows 算法

两个方案

1. 循环普通解法

思路:new 一个牛圈,里面每个元素代表一头牛,元素值代表岁数。一年一年的循环计算,每个cow岁数都加一,如果岁数足够大到生孩子的年龄就生一个

int cows(int year) {

int sum = 1;

const int N = 100;

int* cows = new int[N];

cows[0] = 1;//first cow is one year old

for(int i=0; i<year; i++) {

//如果cows容量越界,重新非配空间

int temp = sum;

for(int j=0; j<temp; j++) {

if(cows[j] >= 4)cows[sum++] = 2;

cows[j]++;

}

}

return sum;

}

int main() {

printf("%d/n", cows(10));

getchar();

return 0;

}

2. 动态规划算法

思路:n年的牛的总头数=1年出生的牛的头数+2年出生的牛的头数+3年出生的牛的头数+。。。

而且 第n年出生的牛的头数 = 第1年出生的牛的头数+第2年出生的牛的头数+第3年出生的牛的头数+。。。第n-3年出生的牛的头数(凡是这些年出生的牛都可以生小牛了)

int cows(int year) {

int* cows = new int[year];

memset(cows, 0, year*4);

cows[0] = 1;

if(year <= 3)return 1;

for(int i=3; i<year; i++) {

for(int j=0; j<=i-3; j++)cows[i] += cows[j];

}

int sum = 0;

for(int i=0; i<year; i++) {

sum += cows[i];

}

return sum;

}

int main() {

printf("%d/n", cows(10));

getchar();

return 0;

}

源文档 <http://bbs.chinaunix.net/archiver/tid-130156-page-12.html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值