| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 271 人关注过本帖
标题:洛谷题库一题 我的代码运行成功了 却是wronganwser
只看楼主 加入收藏
张1099281623
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2020-10-3
结帖率:100%
收藏
已结贴  问题点数:18 回复次数:5 
洛谷题库一题 我的代码运行成功了 却是wronganwser
求大佬帮忙看一下我的代码为什么错了 这是洛谷题库里的一题;
对于一个给定的n*m个矩阵,矩阵中每个元素均为非负整数,游戏规则如下:
1:每次取数时须从每行各取走一个元素,共n个。经过m次后取完矩阵内所有元素;
2:每次取走的各个元素只能是该元素所在行的行首或行尾;
3:每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值*(2的i次方),其中i表示第i次取数(从1开始编号);
4:游戏结束总得分为m次取数得分之和。
帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。
#include<stdio.h>
#include<math.h>
int max(long a,long b)
{
    if(a<b)
        return 1;
        return 0;
}
int main()
{
    int i,j,n,m,row_count_go[100]={0},row_count_back[100]={0};
    long ar_ray[100][100];
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            scanf("%ld",*(ar_ray+i)+j);
    long long sum=0,sum_1[100]={0};
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            if(max(ar_ray[j][row_count_go[j]],ar_ray[j][m-1-row_count_back[j]]))
            {
                sum_1[i]+=ar_ray[j][row_count_go[j]]*(long)pow(2,i+1);
                row_count_go[j]++;
            }
            else
            {
                sum_1[i]+=ar_ray[j][m-row_count_back[j]-1]*(long)pow(2,i+1);
                row_count_back[j]++;
            }
        }
    }
    for(;i>=0;i--)
        sum+=sum_1[i];
    printf("%lld",sum);
    return 0;
}
求大佬帮帮小白
搜索更多相关主题的帖子: 矩阵 for long 代码 元素 
2021-02-09 11:57
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:城市猎人
威 望:9
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:9 
  题干2.每次取数必须是行首或者行末.结合题干3,就表示应该取行首或者行末较小的那个。
程序代码:
#include<stdio.h>
#include<math.h>
int max(long a,long b)
{
    if(a<b)
        return 1;
        return 0;
}
int main()
{
    int i,j,n,m,row_count_go[100]={0},row_count_back[100]={0};
    long ar_ray[100][100];
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            scanf("%ld",*(ar_ray+i)+j);
    long long sum=0,sum_1[100]={0};
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)你的代码for (int j=0;j<n;j++){...}感觉并不能准确更新每轮取数后的行首行末。。。
        {
            if(max(ar_ray[j][row_count_go[j]],ar_ray[j][m-1-row_count_back[j]]))
            {
                //我建议你在这里加个print(),输出每轮筛选出的数值
                sum_1[i]+=ar_ray[j][row_count_go[j]]*(long)pow(2,i+1);
                row_count_go[j]++;
            }
            else
            {
                //我建议你在这里加个print(),输出每轮筛选出的数值
                sum_1[i]+=ar_ray[j][m-row_count_back[j]-1]*(long)pow(2,i+1);
                row_count_back[j]++;
            }
        }
    }
    for(;i>=0;i--)
        sum+=sum_1[i];
    printf("%lld",sum);
    return 0;
}







φ(゜▽゜*)♪
2021-02-09 13:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:399
帖 子:7837
专家分:45834
注 册:2011-1-18
收藏
得分:9 
原题链接不肯给 https://www.
题目要求不肯贴 100% 的数据满足:1≤n,m≤80,0≤ai,j≤10000,你自己算算最大值是多少
算法嘛一看就不对,比如某行是“4 5 0 5”,最优的取法是 5 0 4 5,而非 4 5 0 5
2021-02-09 13:09
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:城市猎人
威 望:9
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
抛砖引玉,我写一段我的代码请楼主测试一下思路对不对
程序代码:
#include<stdio.h>
#include<math.h>

int main()
{
    int n,m,a[101][101];
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf("%d",*(a+i)+j);
    int sum=0;
    for(int p=0;p<m;p++)
    {
        for(int left=0,right=n-1,i=1;left<=right;i++){//这里我逐行计算取数得分,用left,right两个指针分别指向行首行末的位置,每轮比较出较小的那个数并计算分值。使用j辅助计算2的i次方
            if(a[p][left]<a[p][right])sum+=a[p][left++]*pow(2,i);
            else sum+=a[p][right--]*pow(2,i);
        }
     }      
    printf("%d",sum);
    return 0;
}

偷懒,没用长整型,,,全改成整型数了,大概率会引入新的错误

φ(゜▽゜*)♪
2021-02-09 13:17
张1099281623
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2020-10-3
收藏
得分:0 
回复 3楼 rjsp
厉害厉害 一眼就看到问题了 谢谢
2021-02-10 19:30
张1099281623
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2020-10-3
收藏
得分:0 
回复 4楼 书生牛犊
谢兄弟 我的算法思路有漏洞 不能只看首位最小的数 如果矩阵中出现了0 就要考虑将0尽量排在前面 感觉把你也带偏了 不好意思 嘿嘿
2021-02-10 19:43
快速回复:洛谷题库一题 我的代码运行成功了 却是wronganwser
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055985 second(s), 8 queries.
Copyright©2004-2021, BCCN.NET, All Rights Reserved