```
#include <bits/stdc++.h>
using namespace std;
const int maxn=110;
int a[maxn],b[maxn];
long long dp[maxn*10];
int main(){
int t,m;
cin >>t>>m;
for(int i=1;i<=m;i++) cin>>a[i]>>b[i];
for(int i=1;i<=m;i++){
for(int j=t;j>=a[i];--j) dp[j]=max(dp[j],dp[j-a[i]]+b[i];
}
cout <<dp[t];
}
```
$1$. 数据范围看错了。药材的总数为$m$,而你开到了$10^3$;
$2$. $dp[]$ 作为全局变量本身就是默认赋值为$0$,所以没有必要再进行初始化。
$3$. 这道题是一道01背包,如果只用1维的话应该采用倒序循环,具体原因可以参考一下网上资料和辅导书。
这个代码我稍微改了一下,没有运行,谨慎复制。
by smyoking @ 2023-07-15 16:37:21