题解 | RAG系统最大收益

RAG系统最大收益

https://www.nowcoder.com/practice/b1ffe3af0de141ea88fb7045472e9f0e

还是搜索

维护四个状态:

到了第几天,目前剩余有效期还有几天,累积收益多少元,累积成本多少元

以及小剪枝

要预处理一个前缀和

方便用来看如果后续收益全拿满也不够最好状态的收益与成本的差,那么就没必要往后继续搜了

#include<bits/stdc++.h>
using namespace std;

int n,d;
int cost[100005];
int rwd[100005];
int ans=-1;
int sum[100005];
void dfs(int pos,int lft,int rev,int cst)//到了第i天,目前剩余有效期有几天,收益多少元,成本多少元 
{
	if(pos==n+1)
	{
		ans=max(rev-cst,ans);
		return;
	}
	if(sum[n]-sum[pos-1]+rev-cst<ans)return;
	if(lft)
	{
		dfs(pos+1,lft-1,rev+rwd[pos],cst);
		dfs(pos+1,d-1,rev+rwd[pos],cst+cost[pos]);
	}
	else
	{
		dfs(pos+1,d-1,rev+rwd[pos],cst+cost[pos]);
		dfs(pos+1,lft,rev,cst);
	}
}	

int main()
{
	cin>>n>>d;
	for(int i=1;i<=n;i++)
		cin>>cost[i];
	for(int i=1;i<=n;i++)
		{
			cin>>rwd[i];
			sum[i]=sum[i-1]+rwd[i];
		}
	dfs(1,0,0,0);
	cout<<ans;
}

全部评论

相关推荐

04-01 16:02
已编辑
武汉工程大学 Java
牛客98843461...:处女面??我还种马面渣男面处男面呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务