有大佬能帮我看看这个背包还能怎么优化吗,只有TLE40分
查看原帖
有大佬能帮我看看这个背包还能怎么优化吗,只有TLE40分
1194996
Han_feng楼主2024/1/6 23:25
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max(x,y) (x>y?x:y)
typedef struct _machine{
	int t;
	int v;
	int w;
	struct _machine *next;
}Machine;
void add(Machine **machine,int t,int v,int w,int p){
	int i;
	Machine *last=*machine,*new_machine=(Machine *)malloc(sizeof(Machine));
	new_machine->t=t,new_machine->v=v,new_machine->w=w;
	for(i=0;i<p-1;i++)
		last = last->next;
	if(!p){
		new_machine->next=last;
		*machine=new_machine;
	}
	else{
		new_machine->next=last->next;
		last->next=new_machine;
	}
}
void del(Machine **machine,int p){
	int i;
	Machine *last=NULL,*target=*machine;
	for(i=0;i<p;i++){
		last=target;
		target=target->next;
	}
	if(!p)
		*machine=(*machine)->next;
	else
		last->next=last->next->next;
	free(target);
}
void change(Machine *machine,int t,int v,int w,int p){
	int i;
	for(i=0;i<p;i++)
		machine=machine->next;
	machine->t=t,machine->v=v,machine->w=w;
}
void show_machine(Machine *machine){
	int i;
	for(i=1;machine!=NULL;i++){
		printf("%d:t=%d v=%d w=%d\n",i,machine->t,machine->v,machine->w);
		machine=machine->next;
	}
}
int calculate(Machine *machine,int x,int y){
	int i,dp[y+1];
	memset(dp,0,sizeof(dp));
	while(machine!=NULL){
		if(machine->t)
			for(i=machine->v;i<=y;i++)
				dp[i]=max(dp[i],dp[i-machine->v]+machine->w);
		else
			for(i=y;i>=machine->v;i--)
				dp[i]=max(dp[i],dp[i-machine->v]+machine->w);
		machine=machine->next;
	}
	return dp[y]+x;
}
int main(void){
	int q,v,last=0,p=0;
	int opt,ti,vi,wi,xi,yi;
	Machine *machines=NULL;
	scanf("%d%d",&q,&v);
	while(q--){
		scanf("%d%d%d%d%d%d",&opt,&ti,&vi,&wi,&xi,&yi);
		opt^=last,ti^=last,vi^=last,wi^=last,xi^=last,yi^=last;
		//printf("%d %d %d %d %d %d\n",opt,ti,vi,wi,xi,yi);
		switch(opt){
			case 1:p++;break;
			case 2:p--;break;
			case 3:
				add(&machines,ti,vi,wi,p);
				break;
			case 4:
				del(&machines,p);
				break;
			case 5:
				change(machines,ti,vi,wi,p);
				break;
		}
		/*printf("p:%d\n",p);
		show_machine(machines);*/
		last=calculate(machines,xi,yi);
		printf("%d\n",last);
	}
	return 0;
}
2024/1/6 23:25
加载中...