求助!内存地址重合??qwq
查看原帖
求助!内存地址重合??qwq
122342
今夕何年楼主2022/1/12 20:38
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<iomanip>
using namespace std;

int n,m,k,r;
int que[11];
int dp[51];
int pos;

struct def{
	int time,value;
};

def hw[11];

void get_data(){
	cin>>n>>m>>k>>r;
    for(int i=1;i<=n;i++){
    	cin>>que[i];
	}
	for(int i=1;i<=m;i++){
		cin>>hw[i].time ;
//		cout<<hw[i].time<<" ";
	}
//	cout<<endl;
	for(int i=1;i<=m;i++){
		cin>>hw[i].value;
//	    cout<<hw[i].value<<" ";
	}
}

void do_dp(){// 得到及格条件下剩余最多的时间
    memset(dp,0,sizeof(dp));
//    for(int i=1;i<=r;i++)cout<<dp[i]<<" ";
    for(int i=1;i<=m;i++){
    	for(int j=r;j>=hw[i].time;j--){
    		dp[j]=max(dp[j],dp[j-hw[i].time]+hw[i].value);
//    		if(i==1&&dp[j]!=5)cout<<endl<<dp[j]<<" "<<dp[j-hw[i].time ]<<endl;
		}
	}	
    pos=0;
    while(dp[pos]<k)pos++;
}

void check_que(){
	cout<<endl<<endl;
	for(int i=1;i<=n;i++)cout<<que[i]<<" ";
    cout<<endl<<endl;
}

void get_and_give_out_ans(){
	int a=r-pos;
//	cout<<r<<" "<<a<<endl;
//	check_que();
	sort(que+1,que+n+1);
//	check_que();
	int ans=0;
	int i=1;
	while((a-que[i])>0){
		a-=que[i];
		i++;
		ans++;
	}
	cout<< ans;
}

void check_dp(){
	cout<<endl<<endl;
	for(int i=1;i<=r;i++)cout<<dp[i]<<" ";
    cout<<endl<<endl;
}

int main(){
	get_data();
	do_dp();
//	check_dp();
	get_and_give_out_ans();
	return 0;
} 

当我输出中间过程(dp初始值)发现就算保险起见memset清零了,里面还有数据!而且是先前往结构体数组hw里输入的那几组数据!怎么回事呀qwq 编完后一直找问题,最后对照答案也没有任何算法上的问题,一样的思路做法呀,救救sos

2022/1/12 20:38
加载中...