1 solutions
-
0
C++ :
#include<bits/stdc++.h> using namespace std; int a[101],b[20001]/*b 数组多开是因为在算 f 数组时的需要*/; int f[20001];//多算一点,算到 N+max{ai}=2N int main(){ int n,m; cin>>n>>m; for(int i=0;i<m;i++){ cin>>a[i]; } for(int i=0;i<n;i++){ cin>>b[i]; } for(int i=0;i<n+n;i++){ f[i]=-1e9;//初始化为负无穷 } f[0]=0;//记得 f[0] 要初始化为 0 for(int j=0;j<n+n;j++){ for(int i=0;i<m;i++){ if(j>=a[i]){ f[j]=max(f[j],f[j-a[i]]+b[j-a[i]]); } } } int ans=-1e9;//答案变量也要初始化为负无穷 for(int i=n;i<n+n;i++){ ans=max(ans,f[i]);//注意不能直接输出 f[n] 或 f[n-1] } cout<<ans; return 0; }
- 1
Information
- ID
- 9172
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By