打酱油(201709-1/CCF)———附带思路和完整代码

0 效果

递归DFS:
在这里插入图片描述

1 题目

在这里插入图片描述

2 思路

本体是一道完全背包问题,解决方法有递归(剪枝)
递归(n为钱,count为酱油个数):

  • 递归边界:n==0
  • 递归式子:
    • DFS(n - 10, count + 1); //酱油10块钱一瓶
    • DFS(n - 30, count + 4);//每买3瓶送1瓶
    • DFS(n - 50, count + 7);//每买5瓶送2瓶

3 代码

递归:

#include<cstdio>
int ans = 0;
void DFS(int n, int count){
	if(n == 0){
		if(count > ans) ans = count;
		return;
	}
	
	DFS(n - 10, count + 1);
	if(n - 30 >= 0) DFS(n - 30, count + 4);//剪枝
	if(n - 50 >= 0)	DFS(n - 50, count + 7);//剪枝
}
int main(){
	int n;
	scanf("%d", &n);
	DFS(n, 0);
	printf("%d", ans);
	return 0;
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页