神奇事件(悬关)
查看原帖
神奇事件(悬关)
1118893
Dark_Star楼主2024/1/27 16:01
#include<bits/stdc++.h>
#define endl '\n'
#define debug puts("QwQ.Please debug.");
using namespace std;
const int MAXN=1e5+1;
int v[MAXN],w[MAXN],dp[40001];
int main(){
	int n,W,num=0;
	scanf("%d%d",&n,&W);
	for(int i=1;i<=n;++i){
		int tv,tw,tm;
		scanf("%d%d%d",&tv,&tw,&tm);
		for(int j=1;j<tm&&j*tw<=W;j<<=1)v[++num]=tv*j,w[num]=tw*j,tm-=j;
		if(!tm)continue;
		v[++num]=tv*tm;w[num]=tw*tm;
	}for(int i=1;i<=num;++i)
		for(int j=W;j>=w[i];--j)
			dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
	printf("%d",&dp[W]);
	return 0;
}

这段代码在输入样例的时候会输出一个超级无敌大的数字,然后我调了监控:

在用cout监控的时候,我发现二进制拆分没问题,其他不知道;

在用printf监控的时候,我发现拆分数和数组 v,w,dpv,w,dp 都变成了超级无敌大的数字。

然后我推断是scanf和printf的锅,于是改成了cin和cout,结果莫名 AC 了。

有大佬能解释一下这个事情吗?

2024/1/27 16:01
加载中...