第十二届蓝桥杯省赛C&C++ 研究生组-砝码称重


solution1(通过10%)

写了几种可能的组合方式,骗到一丢丢分数

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
int main(){
	int n, a[110], count = 0, sum[110] = {0};
	map<int, int> mp;
	scanf("%d", &n);
	for(int i = 0; i < n; i++){
		scanf("%d", a + i);
		if(i == 0) sum[i] = a[i];
		else sum[i] = a[i] + sum[i - 1];
		mp[a[i]] = 1;
		mp[sum[i]] = 1;
	} 
	sort(a, a + n); 
	for(int i = 1; i <= sum[n - 1]; i++){
		if(mp[i] == 1) continue;
		for(int j = n - 1; j >= 0; j --){
			for(int k = 0; k < j; k++){
				if(a[j] - a[k] == i){
					mp[i] = 1;
					continue;
				}
			}
		}
		if(!mp[i]){
			for(int j = n - 1; j>= 0; j--){
				for(int k = 0; k < j; k++){
					if(a[k] + a[j] == i){
						mp[i] = 1;
						continue;
					}
				}
			}
		}
	}
	printf("%d", mp.size());
	return 0;
}

solution2(动规)

cpp 复制代码
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 100010, N = 110;
int dp[N][maxn] = {0}, w[N];//dp[i][j]表示用前i个砝码,是否可以称出j克的重量 
int main(){
	int n, max = 0, count = 0;
	scanf("%d", &n);
	for(int i = 1; i <= n; i++){
		scanf("%d", w + i);
		max += w[i];
	}
	for(int i = 1; i <= n; i++){//依次计算前i个砝码能够称出的重量 
		for(int j = 1; j <= max; j++){//依次判断所有可能的重量是否能称出来 
			dp[i][j] = dp[i - 1][j];//用i个砝码能称出来的重量,i+1个肯定也能成
			if(dp[i][j] == 0){//i-1个不能称,看看加上第i个行不行
				//能称出的三种情况:1.刚好是第i个砝码本身重量  2.已经能称出来j+a[i],第i个拿到对面 3.已经能称出abs(j-a[i])加上第i个 
				if(w[i] == j || (dp[i - 1][j + w[i]]) || (dp[i-1][abs(j - w[i])])) dp[i][j] = 1; 
			} 
		}
	}
	for(int j = 1; j <= max; j++)
		count += dp[n][j];
	printf("%d", count);
	return 0;
}
相关推荐
不吃鱼的猫74813 分钟前
【从零手写播放器:FFmpeg 音视频开发实战】04-封装格式与多媒体容器
c++·ffmpeg·音视频
星火开发设计16 分钟前
异常规范与自定义异常类的设计
java·开发语言·前端·c++
小卓(friendhan2005)23 分钟前
高并发内存池
c++
汉克老师1 小时前
GESP2024年9月认证C++二级( 第三部分编程题(1) 数位之和 )
c++·循环结构·分支结构·gesp二级·gesp2级·求余数·拆数字
lxl13071 小时前
C++算法(3)二分算法
数据结构·c++·算法
麦德泽特2 小时前
蓝牙与WiFi之外:为机器人选择合适的近距离无线通信技术
c语言·开发语言·安全·机器人·ssh
星火开发设计2 小时前
C++ 异常处理:try-catch-throw 的基本用法
java·开发语言·jvm·c++·学习·知识·对象
白太岁2 小时前
C++:(3) 线程的关联、条件变量、锁和线程池
开发语言·c++
仰泳的熊猫2 小时前
题目1474:蓝桥杯基础练习VIP-阶乘计算
数据结构·c++·算法·蓝桥杯
WBluuue2 小时前
数据结构与算法:dp优化——树状数组/线段树优化
数据结构·c++·算法·leetcode·动态规划