两则代码的区别仅仅是枚举,但是第一个是AC的了,第二个只有40pts,为什么不能像第二个这样枚举?
#include<algorithm>
#include<iostream>
using namespace std;
const int N = 110,M = 2e4 + 10;
int s,n,m,a[N][N],dp[M];
#define f(x) ((x) * 2 + 1)
int main()
{
cin >> s >> n >> m;
for(int i = 1;i <= s;i++)
for(int j = 1;j <= n;j++)
cin >> a[j][i];
for(int i = 1;i <= n;i++)
sort(a[i] + 1,a[i] + 1 + s);
for(int i = 1;i <= n;i++)
for(int k = m;k >= 0;k--)
for(int j = 1;j <= s;j++)
if(k >= f(a[i][j]))
dp[k] = max(dp[k],dp[k - f(a[i][j])] + i * j);
cout << dp[m];
return 0;
}
#include<algorithm>
#include<iostream>
using namespace std;
const int N = 110,M = 2e4 + 10;
int s,n,m,a[N][N],dp[M];
#define f(x) ((x) * 2 + 1)
int main()
{
cin >> s >> n >> m;
for(int i = 1;i <= s;i++)
for(int j = 1;j <= n;j++)
cin >> a[j][i];
for(int i = 1;i <= n;i++)
sort(a[i] + 1,a[i] + 1 + s);
for(int i = 1;i <= n;i++)
for(int j = 1;j <= s;j++)
for(int k = m;k >= f(a[i][j]);k--)
dp[k] = max(dp[k],dp[k - f(a[i][j])] + i * j);
cout << dp[m];
return 0;
}