POST_IN_PREV

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


char a[28] = "";
char b[28] = "";
char c[28] = "";
int count;
int step;
int N;
int hehe;


void search(int m, int n){
int i;
if(count == N){
return ;
}
for(i = m; i < n; i++){
if(b[i] == a[step]){
step--;
count++;
break;
}
}
if(i == n){
return ;
}
search(i + 1, n);
search(m, i);
c[hehe++] = b[i];
}


int main()
{
int i;
while(1){

count = 0;
hehe = 0;
scanf("%d", &N);
getchar();


memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));


gets(b);
gets(a);
step = N - 1;
search(0, N);
for(i = count - 1; i >= 0; i--){
printf("%c", c[i]);
}
}
return 0;
}

def calculate_speed(self, trk_id, track): """ Calculation of object speed. Args: trk_id (int): object track id. track (list): tracking history for tracks path drawing """ if len(track) < 2: return # 至少需要两个点计算位移 x1, y1 = self.reg_pts[0] x2, y2 = self.reg_pts[1] line_is_vertical = x1 == x2 # 获取当前点和前一点 current_point = track[-1] prev_point = track[-2] if len(track) >= 2 else None if prev_point is None: return # 判断是否穿过测速线 crossed = False if line_is_vertical: x_line = x1 # 检查两点是否在垂直线两侧 if (prev_point[0] - x_line) * (current_point[0] - x_line) < 0: crossed = True else: y_line = y1 # 检查两点是否在水平线两侧 if (prev_point[1] - y_line) * (current_point[1] - y_line) < 0: crossed = True if crossed: current_time = time() prev_time = self.trk_previous_times.get(trk_id, 0) if prev_time != 0: time_difference = current_time - prev_time if time_difference > 0: if line_is_vertical: # 垂直线:计算Y方向位移 dist_difference = abs(current_point[1] - prev_point[1]) else: # 水平线:计算X方向位移 dist_difference = abs(current_point[0] - prev_point[0]) speed = dist_difference / time_difference self.dist_data[trk_id] = speed # 更新记录 self.trk_previous_times[trk_id] = current_time self.trk_previous_points[trk_id] = current_point运行程序会报错PS C:\Users\MSI\Desktop\YoloDeepSort> python -u "c:\Users\MSI\Desktop\YoloDeepSort\speed.py" 0: 384x640 1 person, 2 motorcycles, 15.9ms Speed: 1.7ms preprocess, 15.9ms inference, 1.5ms postprocess per image at shape (1, 3, 384, 640) shape (
03-14
import heapq def main(): import sys input = sys.stdin.read data = input().split() ptr = 0 N = int(data[ptr]) ptr += 1 M = int(data[ptr]) ptr += 1 edges = [[] for _ in range(N+1)] for _ in range(M): u = int(data[ptr]) ptr += 1 v = int(data[ptr]) ptr += 1 w = int(data[ptr]) ptr += 1 edges[u].append((v, w)) edges[v].append((u, w)) # Dijkstra to find shortest path tree dist = [float('inf')] * (N+1) parent = [0] * (N+1) dist[1] = 0 visited = [False] * (N+1) heap = [(0, 1)] while heap: d, u = heapq.heappop(heap) if visited[u]: continue visited[u] = True for v, w in edges[u]: if not visited[v] and dist[v] > d + w: dist[v] = d + w parent[v] = u heapq.heappush(heap, (dist[v], v)) # Build children list children = [[] for _ in range(N+1)] for v in range(2, N+1): u = parent[v] children[u].append(v) # Post-order traversal post_order = [] visited = [False] * (N+1) def dfs(u): visited[u] = True for v in children[u]: if not visited[v]: dfs(v) post_order.append(u) dfs(1) S = int(data[ptr]) ptr += 1 P = [[0.0] * (S+1) for _ in range(N+1)] # P[u][k] is the probability with k people for u in range(1, N+1): for j in range(1, S+1): P[u][j] = float(data[ptr]) ptr += 1 dp = [[0.0] * (S+1) for _ in range(N+1)] best = [[0.0] * (S+1) for _ in range(N+1)] # best[u][s] = max(dp[u][0..s]) for u in post_order: if not children[u]: # Leaf node for s in range(S+1): if s == 0: dp[u][s] = 0.0 else: dp[u][s] = P[u][s] # Precompute best current_max = 0.0 for s in range(S+1): if s > 0: current_max = max(current_max, dp[u][s]) best[u][s] = current_max else: # Non-leaf node # Precompute best for children for v in children[u]: current_max = 0.0 for s in range(S+1): if s > 0: current_max = max(current_max, dp[v][s]) best[v][s] = current_max # Compute dp[u][s] for s in range(S+1): max_prob = 0.0 for k in range(0, s + 1): p = P[u][k] if k > 0 else 0.0 s_remain = s - k if s_remain < 0: continue m = len(children[u]) if m == 0: total = p if total > max_prob: max_prob = total continue # Group knapsack f = [-1.0] * (s_remain + 1) f[0] = 0.0 for v in children[u]: # Preprocess key points key_points = [] prev_max = -1.0 for t in range(0, s_remain + 1): t_actual = min(t, S) current = best[v][t_actual] if current > prev_max: key_points.append(t) prev_max = current # Update f for j in range(s_remain, -1, -1): for t in key_points: if j >= t and f[j - t] != -1: if f[j] < f[j - t] + best[v][min(t, S)]: f[j] = f[j - t] + best[v][min(t, S)] max_sum = max(f) if max(f) >= 0 else 0.0 avg = max_sum / m if m > 0 else 0.0 total = p + (1 - p) * avg if total > max_prob: max_prob = total dp[u][s] = max_prob # Precompute best[u] current_max = 0.0 for s in range(S+1): if s > 0: current_max = max(current_max, dp[u][s]) best[u][s] = current_max print("{0:.4f}".format(dp[1][S])) if __name__ == "__main__": main()转c++
05-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值