1079: PIPI的存钱罐

题目描述
PIPI有n种硬币,每种硬币有特定的重量wei[i] 克和它对应的价值val[i].

已知有一个承重量为m的存钱罐,当里面正好装着重量为m的硬币时,问你这个存钱罐中硬币的最小价值是多少? 如果不可能存在m克的情况, 那么就输出”impossible“

输入
多组输入。
第一行包括两个整数n,m(1<=n<=500,1<=m<=10000)
接下来n行,每行两个整数v,w,表示第i中硬币的价值与重量。(1<=v<=10000,1<=w<=m)
输出
输出可能的最小价值,如果不可能存在m克的情况, 那么就输出”impossible“

样例输入
2 100
1 1
30 50
2 100
1 1
50 30
样例输出
60
100

思路:完全背包问题(最小背包)

#include<iostream>
#include<algorithm>
using namespace std;
#define INF 1e9
/*
	完全背包问题(最小背包)
	明确了这个模型是完全背包问题,我们再来确定初始状态,dp数组的初始状态,dp[0]应该是0,dp[1-m]都INF,
	原因是想用硬币更新其值,不然就是一个硬币都没有放入。(感觉类比求一个数组的最小值比较好理解这里的初始化INF的处理)
	既然是求得最小价值,那么状态转移方程应该是dp[j]=min(dp[j-c[i]+w[i],dp[j]);
*/
const int N = 1e4+5;
int dp[N];

int main(){
	int n,m;
	while(~scanf("%d %d",&n,&m)){
	//	dp[0] = 0;	//默认是0 
		for(int i=1;i<=m;i++){
			dp[i] = INF;	//初始条件 
		}
		int v[n+1],w[n+1];
		for(int i=1;i<=n;i++){
			scanf("%d %d",&v[i],&w[i]);
		}
		for(int i=1;i<=n;i++){
			//注意j是正序循环(因为每种硬币有无数个,可重复放) 
			for(int j=w[i];j<=m;j++){
				dp[j] = min(dp[j],dp[j-w[i]]+v[i]);
			}
		}
		if(dp[m] == INF){	//说明没有装满 
			printf("impossible\n");
		}else{
			printf("%d\n",dp[m]);
		}
	}
	return 0;
}
### PIPI 数学题解决方案 针对与 PIPI 相关的数学题,通常可以通过设计特定的算法来解决。以下是基于常见数学题类型的通用方法及其代码实现。 #### 字符串模拟类题 如果题是关于字符串操作(如引用中的第一题),则可以利用 Python 的字符串处理功能快速解决题。例如: ```python def string_simulation(s, operation): result = [] for char in s: if operation == 'reverse': result.insert(0, char) elif operation == 'uppercase': result.append(char.upper()) return ''.join(result) # 测试用例 print(string_simulation("pipi", "reverse")) # 输出:ipip print(string_simulation("pipi", "uppercase")) # 输出:PIPI ``` 此函数支持两种基本操作:“反转”和“大写转换”,可以根据具体需求扩展更多逻辑[^2]。 #### 复杂数学计算题 对于更复杂的数学题,可能涉及到矩阵运算或数值优化等题。这类题往往需要借助 NumPy 库或其他科学计算工具包完成高效计算。以下是一个简单的矩阵乘法示例: ```python import numpy as np def matrix_multiplication(matrix_a, matrix_b): try: result_matrix = np.dot(matrix_a, matrix_b) return result_matrix.tolist() except ValueError: return "Matrix dimensions do not match." # 测试用例 matrix_a = [[1, 2], [3, 4]] matrix_b = [[5, 6], [7, 8]] print(matrix_multiplication(matrix_a, matrix_b)) # 输出:[[19, 22], [43, 50]] ``` 该函数实现了两个二维数组之间的矩阵乘法,并返回结果作为列表形式输出[^1]。 #### 推理与预测模型应用 当遇到涉及机器学习推理的任务时,应优先考虑简化模型架构以降低延迟时间。比如加载预训练好的 TensorFlow Lite 模型来进行实时分类判断: ```python import tensorflow as tf def load_and_predict(model_path, input_data): interpreter = tf.lite.Interpreter(model_path=model_path) interpreter.allocate_tensors() input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() interpreter.set_tensor(input_details[0]['index'], input_data) interpreter.invoke() prediction_result = interpreter.get_tensor(output_details[0]['index']) return prediction_result # 假设 model.tflite 已存在且输入维度已知 input_sample = np.random.rand(1, 28, 28).astype(np.float32) result = load_and_predict('model.tflite', input_sample) print(result.shape) # 打印输出张量形状 ``` 上述脚本展示了如何通过 TensorFlow Lite 加载轻量化模型执行推断过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值