求调,AI别来
  • 板块题目总版
  • 楼主noiasd
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/9/17 13:03
  • 上次更新2024/9/17 16:50:29
查看原帖
求调,AI别来
1028839
noiasd楼主2024/9/17 13:03

Code求调

从前有一家人有 nn 瓶酒排成一行,第 ii 瓶的价值为 viv_i。有一个酒贼去偷恰好 kk 瓶酒。酒贼不能在连续的 dd 瓶酒中偷走多于一瓶。求酒贼所有偷酒方案的价值和的和模998244353998244353的值。

样例1:

输入:

4 2 2

1 4 2 3

输出:14

样例2

输入: 5 2 3

1 5 7 7 3

输出:

20

样例3:

输入:

12 4 2

107367523

266126484

149762920

57456082

857431610

400422663

768881284

494753774

152155823

740238343

871191740

450057094

#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
const int N=5010;
int n,k,d;
int a[N];

const int mod=998244353;

int f[N][N];//f[j][i]表示的是已经偷了 j 瓶酒(0<=j<=k),,当前如果在i这个地方偷一瓶酒,且所有偷酒方案的价值总和 

int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>k>>d;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	f[1][1]=a[1]%mod;
	f[1][0]=0;
	for(int j=1;j<=k;j++){
		for(int i=1;i<=n;i++){
			f[j][i]=(f[j][i]%mod+f[j-1][i-d]%mod)%mod;
		}
	}
	int maxn=-1;
	for(int i=1;i<=n;i++) maxn=max(f[k][i],maxn);
	cout<<maxn;
	return 0;
}

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
const int N=5010;
int n,k,d;
int a[N];

const int mod=998244353;

int f[N][N];//f[j][i]表示的是已经偷了 j 瓶酒(0<=j<=k),,当前如果在i这个地方偷一瓶酒,且所有偷酒方案的价值总和 

int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>k>>d;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	f[1][1]=a[1]%mod;
	f[1][0]=0;
	for(int j=1;j<=k;j++){
		for(int i=1;i<=n;i++){
			f[j][i]=(f[j][i]%mod+f[j-1][i-d]%mod)%mod;
		}
	}
	int maxn=-1;
	for(int i=1;i<=n;i++) maxn=max(f[k][i],maxn);
	cout<<maxn;
	return 0;
}

2024/9/17 13:03
加载中...