题解 | #神奇的口袋#

神奇的口袋

http://www.nowcoder.com/questionTerminal/9aaea0b82623466a8b29a9f1a00b5d35

【C++】已通过,利用动态规划

using namespace std;
int a[21];
int mem[21][41];
//求拿礼物方法总数,m种商品,容积capacity
int ways(int m, int capacity) {
	if (capacity < 0) {
		return 0;
	}
	if (capacity == 0) {
		mem[m][capacity] = 1;
		return 1;
	}
	if (m == 0 && capacity != 0) {
		mem[m][capacity] = 0;
		return 0;
	}
	if (mem[m][capacity] != -1) {
		return mem[m][capacity];
	}
	else {
		//核心递推
		mem[m][capacity] = ways(m - 1, capacity) + ways(m - 1, capacity - a[m]);
		return mem[m][capacity];
	}
}
int main() {
	int n; cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	for (int i = 0; i < 21; i++) {
		for (int j = 0; j < 41; j++) {
			mem[i][j] = -1;//刷新DP记忆数组
		}
	}
	cout << ways(n, 40) << endl;
	return 0;
}
全部评论

相关推荐

10-09 17:17
已编辑
门头沟学院 Java
活泼的代码渣渣在泡池...:同学你好,我也是学院本,后天要面这个亚信科技,是实习,请问问题都啥样呀,我项目就做了网上的,这是第一次面试
投递多益网络等公司10个岗位
点赞 评论 收藏
分享
已注销:bro不如吃顿疯狂星期四
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务