本文主要是介绍[GESP202312 六级] 闯关游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路
这道题目使用动态规划(dynamic programming)。
dp[i]存储通过第 i 关能够获得的最高分数。
先把可以到达的关卡标记好。
然后用 for 循环计算 dp[i] 的值。
最后用一个 for 循环找到最大的 dp[i] 的值并输出。
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,a[105],b[20005],dp[20005];
int main(){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*2;i++) cout<<c[i]<<endl;dp[0]=b[0];for(int i=1;i<n*2;i++){dp[i]=-1e8;for(int j=0;j<m;j++){if(i-a[j]>=0&&dp[i-a[j]]!=-1e8){dp[i]=max(dp[i],dp[i-a[j]]+b[i]);}}}
// for(int i=0;i<n;i++) cout<<dp[i]<<" ";int ans=-1000000001;for(int i=n-1;i<n*2;i++){ans=max(ans,dp[i]);}cout<<ans;return 0;
}
这篇关于[GESP202312 六级] 闯关游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!