一个疑问
查看原帖
一个疑问
948216
ZackofZHOU楼主2025/7/21 13:44

两则代码的区别仅仅是枚举,但是第一个是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;
}
2025/7/21 13:44
加载中...