dp or 数学问题

在这里插入图片描述
在这里插入图片描述

看一下数据量,只有一千,说明这个不是数学问题

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;

#define int long long
const int mo = 100000007;
int n, s, a, b;
const int N = 1005;

// +2  -3
// 1 3 5 2 -1
// 1 -2 -5 -3 -1 
int dp[N][N];
int fun(int x) {
	return (x % n + n) % n;
}

signed main() {
	cin >> n >> s >> a >> b;
	dp[0][0] = 1;
	for (int i = 1; i < n; i++) {
		for (int j = 0; j < n; j++) {
			dp[i][j] = (dp[i - 1][fun(j - a * i)] + dp[i - 1][fun(j + b * i)])%mo;
		}
	}
	cout << dp[n - 1][fun(s)];
	return 0;
}
下面是一个简单的Python代码,用于解决碎纸片拼接问题数学建模: ```python import cv2 import numpy as np # 读入碎纸片图像 img = cv2.imread("shredded_paper.jpg") # 将碎纸片图像分割成n个部分 n = 10 h, w, c = img.shape piece_width = w // n pieces = [img[:, i*piece_width:(i+1)*piece_width] for i in range(n)] # 计算每个碎纸片的边缘特征 edges = [] for p in pieces: gray = cv2.cvtColor(p, cv2.COLOR_BGR2GRAY) edge = cv2.Canny(gray, 50, 200) edges.append(edge) # 计算每个碎纸片与其他碎纸片的相似度 similarities = np.zeros((n, n)) for i in range(n): for j in range(n): if i == j: continue match = cv2.matchShapes(edges[i], edges[j], cv2.CONTOURS_MATCH_I2, 0) similarities[i][j] = match # 使用动态规划算法来拼接碎纸片 dp = np.zeros((n, 1 << n)) for i in range(n): dp[i][1 << i] = 1 for bm in range(1 << n): for i in range(n): if not (bm & (1 << i)): continue for j in range(n): if i == j or not (bm & (1 << j)): continue dp[i][bm] = max(dp[i][bm], dp[j][bm ^ (1 << i)] + similarities[j][i]) # 找到最优拼接方案 ans = [] bm = (1 << n) - 1 i = np.argmax(dp[:, bm]) while bm: ans.append(i) bm ^= 1 << i i = np.argmax(dp[:, bm]) # 拼接碎纸片 result = np.hstack([pieces[i] for i in ans]) cv2.imwrite("result.jpg", result) ``` 上述代码使用了以下步骤来解决碎纸片拼接问题: 1. 将碎纸片图像分割成n个部分。 2. 计算每个碎纸片的边缘特征。 3. 计算每个碎纸片与其他碎纸片的相似度。 4. 使用动态规划算法来拼接碎纸片。 5. 找到最优拼接方案。 6. 拼接碎纸片。 注意,这只是一个简单的数学建模实现,实际上在解决这个问题时还需要考虑许多其他因素,例如光照、颜色等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wniuniu_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值