哦兄弟,我的dp怎么了
查看原帖
哦兄弟,我的dp怎么了
289056
北射天狼楼主2023/8/1 19:02
#include <bits/stdc++.h>
using namespace std;
inline int read(){
	int s = 0,f = 1;char c = getchar();
	while (!isdigit(c)){if (c == '-')f = -1;c = getchar();}
	while (isdigit(c)){s = (s << 3) + (s << 1) + (c ^ 48);c = getchar();}
	return s*f;
}
const int N = 105;
int s,n,m;
int dp[N][N * N * 4];
int a[N][N];
int main()
{
    s = read(); n = read();  m = read();
    for (int i=1;i<=s;++i)
    	for (int j=1;j<=n;++j)
    		a[j][i] = read();
    for (int i=1;i<=n;i++)
        sort(a[i]+1,a[i]+s+1);
	for (int i=1;i<=n;++i){
		for (int k = 0;k <= m;++k){
		    for (int j=1;j<=s;j++){
		    	int cnt = 2 * a[i][j] + 1;
			    if (k >= cnt) dp[i][k] = max({dp[i][k],dp[i-1][k - cnt] + i * j});
				else dp[i][k] = max({dp[i][k],dp[i-1][k]});
				if (k != 0)
				    dp[i][k] = max(dp[i][k],dp[i][k-1]);
			}
		}
	}
	cout << dp[n][m] << endl;
	return 0;
}

这真的是太奇怪了。

2023/8/1 19:02
加载中...