社区讨论

不是?!

P1537弹珠参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mlkyt9ut
此快照首次捕获于
2026/02/13 22:10
6 天前
此快照最后确认于
2026/02/14 15:04
5 天前
查看原帖
我没做优化直接过了?
CPP
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <bitset>
#include <cstring>
#include <map>
#include <queue>
#include <stack>

using namespace std;

//object:
const int N = 2e5 + 50;
int pos = 0;
int nums[10], sum;
bool dp[N];

//data structure:


//function:


signed main() {
	while (1) {
		pos ++;
		
		sum = 0;
		for (int i = 1; i <= 6; i ++) {
			cin >> nums[i];
			sum += nums[i] * i;
		}
		if (sum == 0) break;
		
		//1.特判1:如果是奇数,不可能平分价值
		if (sum & 1) {
			printf("Collection #%d:\nCan't be divided.\n\n", pos);
			continue;
		}
		
		int max_vol = sum / 2;
		
		memset(dp, 0, sizeof dp);
		dp[0] = 1;
		
		for (int i = 1; i <= 6; i ++) {
			for (int j = max_vol; j >= i; j --) {
				for (int k = 0; k <= nums[i] && k * i <= j; k ++) {
					if (dp[j - k * i]) {
						dp[j] = 1;
					}
				}
			}
		}
		
		if(dp[max_vol]) {
			printf("Collection #%d:\nCan be divided.\n\n", pos);
		} else {
			printf("Collection #%d:\nCan't be divided.\n\n", pos);
		}
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...