警钟砸烂
查看原帖
警钟砸烂
1242018
aleavf楼主2024/8/19 08:22

本题输入数据虽然不大,但是在计算过程中数会很大
像以下代码不做优化是过不去的:

#include<bits/stdc++.h>
using namespace std;
long long t,m,a[100100],b[100100],dp[100000100],w;
int main(){
	scanf("%lld%lld%lld",&t,&m,&w);
	for(int i = 1;i <= w;++i) scanf("%lld%lld",&a[i],&b[i]);
	while(m--){ 
		memset (dp , 0 ,sizeof (dp));
		for(int i = 1;i <= w;i++)
			for(int j = a[i];j <= t;j++)
				dp[j] = max( dp[j],dp[ j - a[i] ] + b[i]);
		t += dp[t];
	} 
	cout<<t;
}

要么RE要么T,把输入的数据除以一千才可以过

2024/8/19 08:22
加载中...