题解 | #神奇的口袋#

神奇的口袋

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;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 13:15
点赞 评论 收藏
分享
这是什么操作什么意思,这公司我服了...
斯派克spark:意思是有比你更便宜的牛马了
点赞 评论 收藏
分享
陈逸轩1205:才105 哥们在养生呢
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 11:20
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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