为哈子我这个数组越界显示答案错误呢?
查看原帖
为哈子我这个数组越界显示答案错误呢?
297913
青鱼Official楼主2020/7/30 13:43

原来,我写了一个die码,显示答案错误,然后数组开大,立刻正确,请问为什么?

其实我只是复制了上一次的01背包,改了一下价值,直接提交的。。

第一次的程序如下:

#include <bits/stdc++.h>
#define pb(whatwhat) push_back(whatwhat)
#define rs(whatwhat) resize(whatwhat)
using namespace std;
template <typename T>inline void read(T& t){
    t=0;
    register char ch=getchar();
    while(!('0'<=ch&&ch<='9')){
        if(ch=='-') t*=-1;
        ch=getchar();
    }
    while(('0'<=ch&&ch<='9')){
        t=((t<<1)+(t<<3))+ch-'0';
        ch=getchar();
    }
}
template <typename T,typename... Args> inline void read(T& t, Args&... args){
    read(t);read(args...);
}
template <typename T>inline void write(T x){
    if(x<0) putchar('-'),x=~(x-1);
    int s[30],top=0;
    while(x) s[++top]=x%10,x/=10;
    if(!top) s[++top]=0;
    while(top) putchar(s[top--]+'0');
}//快读快输
int v[108],w[108];
int dp[186][20086];
int n,s;
int dfs(int dep,int r){
	if(dep>n) return 0;
	if(r<0) return 0;
	if(!dp[dep][r]){
		int &ans=dp[dep][r];
		if(r>=w[dep]) ans=max(ans,max(dfs(dep+1,r-w[dep])+v[dep]*w[dep],dfs(dep+1,r)));
		else ans=max(ans,dfs(dep+1,r));
	}
	return dp[dep][r];
}
int main()
{
	read(s,n);
	for(int i=1;i<=n;++i)
		read(w[i],v[i]);
	dfs(1,s);
	cout<<dp[1][s];
    return 0;
}

请勿喷用户名,那是同机房cs道友改的=-=(已捶爆其卤头头颅)

2020/7/30 13:43
加载中...