求问91输出负的
查看原帖
求问91输出负的
688783
SilverLi楼主2024/10/24 11:42
#include <bits/stdc++.h>
#define ps putchar(' ')
#define pe putchar('\n')
// #define int long long
#define pi pair<int, int>
#define fi first
#define se second
#define ls p<<1
#define rs p<<1|1
//#define ls son[p][0]
//#define rs son[p][1]
#define len (r-l+1)
#define mid ((l+r)>>1)
using namespace std;
inline int read() {
	int f=0, ans=0;
	char c=getchar();
	while(!isdigit(c))	f|=c=='-', c=getchar();
	while(isdigit(c))	ans=(ans<<3)+(ans<<1)+c-48, c=getchar();
	return f?-ans:ans;
}
void write(int x) {
	if(x<0)	putchar('-'), x=-x;
	if(x>9)	write(x/10);
	putchar(x%10+'0');
}
const int N=1e2+5, M=1e3+5, inf=1e9, mod=998244353;
int n, m, kth, a[N], x[N];
int f[N][M][N][2];
signed main() {
//	freopen(".in", "r", stdin);
//	freopen(".out", "w", stdout);
	n=read(), m=read(), kth=read();
	for(int i=1;i<=n;++i)	a[i]=read(), x[i]=read();
	for(int j=0;j<=m;++j)
		for(int k=0;k<=kth;++k)
			for(int l=0;l<2;++l)
				f[0][j][k][l]=-inf;
	f[0][0][0][0]=0;
	for(int i=1;i<=n;++i) {
		for(int j=0;j<=m;++j)
			for(int k=0;k<=kth;++k)
				for(int l=0;l<2;++l) {
					f[i][j][k][0]=f[i-1][j][k][0];
					f[i][j][k][1]=max(f[i-1][j][k][0], f[i-1][j][k][1]);
				}
		for(int j=x[i];j<=m;++j)
			for(int k=0;k<=kth;++k) {
				f[i][j][k][0]=max(f[i][j][k][0], f[i-1][j-x[i]][k][0]+a[i]);
				f[i][j][k][1]=max(f[i][j][k][1], f[i-1][j-x[i]][k][1]+a[i]);
				if(k>0)
					f[i][j][k][0]=max(f[i][j][k][0], f[i-1][j-x[i]][k-1][0]+(a[i]<<1)),
					f[i][j][k][1]=max(f[i][j][k][1], f[i-1][j-x[i]][k-1][1]+(a[i]<<1));
			}
	}
	int ans=-inf;
	for(int j=0;j<=m;++j)
//    	for(int k=0;k<=kth;++k)
    		ans=max(ans, f[n][j][kth][1]);
	write(ans);
	return 0;
}

末尾的

for(int j=0;j<=m;++j)
//	for(int k=0;k<=kth;++k)
    		ans=max(ans, f[n][j][kth][1]);

改为

for(int j=0;j<=m;++j)
   	for(int k=0;k<=kth;++k)
    		ans=max(ans, f[n][j][k][1]);

才能过,为什么

题面不是说 每位老师的行为必须执行

2024/10/24 11:42
加载中...