题目测试数据有点小漏洞。

这题测试数据感觉不太严谨,这是第二次做感觉做过,就来翻了翻以前的代码
#include "cstdio"
#include "cstring"
#include "algorithm"
#define ll long long
const int maxn = 200;
int maze[maxn][maxn];
int n,m,k;
struct node{
    int id,val;
    bool operator < (const node &o)const
    {
        return val>o.val;
    }
    node()
    {
        id=0;
        val=0;
    }
};
node row[maxn],col[maxn];
 
bool cmp(const int &o,const int &v)
{
    return o>v;
}
 
int main()
{
    //ll n,m,k;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {  
            row[i].id=i;
            int x;
            scanf("%d",&x);
            row[i].val+=x;
            col[j].val+=x;
            maze[i][j]=x;
        }
    }
    int ans=0;
    int c[200];
    std::sort(row+1,row+1+n);
//  std::sort(col+1,col+1+n);
    for(int i=0;i<=k;i++)
    {
        memset(c,0,sizeof(c));
        int tmp=0;
        for(int j=1;j<=i;j++)
        {
            for(int k=1;k<=m;k++)
                c[k]+=maze[row[j].id][k];
            tmp+=row[j].val;
        }
        for(int j=1;j<=m;j++)
        {
            c[j]=col[j].val-c[j];
        }
        std::sort(c+1,c+1+m,cmp);
        for(int j=1;j<=k-i;j++)
            tmp+=c[j];
        ans=std::max(tmp,ans);
    }
    printf("%d\n",ans);
}

思路是把枚举i个行和k-i个列的消除,先消除最大的行,然后列中减去排序再找k-i个最大的列,发现有逻辑错误,应该把所有行都枚举才对,但是以前提交却ac了。。。数据问题。。

自己hack一下自己。。。
3 3 2
104 1 102
0 202 0
100 8 100
正确答案应该是417,代码跑出来415,提交ac。。。
全部评论

相关推荐

05-28 23:26
河南大学 Java
双非本,刚学完Redis,项目只有外卖和点评,八股没准备,算法只有lqb省一,感觉敲的项目也是一言难尽没怎么吸收。怎么你们都有实习了
大牛之途:27急个锤子,你投日常实习最好的时间就是9,10月份,那时候暑期实习都结束了,正是缺人的时候。这份日常又能给你的暑期实习增加竞争力,暑期找的好了秋招也不怕了,都是环环相扣的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务