求助于广大热心oier
  • 板块学术版
  • 楼主Lwerecha
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/11/3 23:37
  • 上次更新2023/11/5 09:04:22
查看原帖
求助于广大热心oier
334392
Lwerecha楼主2020/11/3 23:37

如何将这份代码以非递归形式写出?

这种写法超时挂掉了。。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int n,v,maxx=0x3f3f3f3f,n_k,l_k;bool vst[1003];
struct node{int line,w;}a[1001];
bool cmp(node a,node b) {
	return a.line<b.line;
}
void dfs(int k,int used,int sw,int l,int r) {
	#define s a[k].line
	n_k=(r>n?0:r),l_k=(l<1?0:l);
	if(n_k) dfs(n_k,used+(a[n_k].line-s)*sw,sw-a[n_k].w,l,r+1);
	if(l_k) dfs(l_k,used+(s-a[l_k].line)*sw,sw-a[l_k].w,l-1,r);
	if(!n_k&&!l_k) maxx=min(maxx,used);
}
signed main() {
	scanf("%d%d",&n,&v);
	int sumw=0;
	for(int i=1;i<=n;i++) {
		scanf("%d%d",&a[i].line,&a[i].w);
		sumw+=a[i].w;
	}
	int l_s=a[v].line;sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++) if(a[i].line==l_s) {v=i;break;}
	dfs(v,0,sumw-a[v].w,v-1,v+1);
	printf("%d",maxx);
}

帮忙看看感激不尽呀,大佬们

2020/11/3 23:37
加载中...