qq_42377800 2022-02-11 21:59 采纳率: 100%
浏览 28
已结题

一道OJ动态规划题(Print Words in Lines),同样的代码用C++能通过,改写为C就不行

C++版本


//poj 3390
//sep9
#include <iostream>
#include<memory.h>
using namespace std;
const int maxM=102;
const int maxN=10004;
int dp[maxN+1][maxM+1];
int L[maxN];

int main()
{
    int cases;
    scanf("%d",&cases);
    while(cases--){
        int m,n,s;
        scanf("%d%d",&m,&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&L[i]);
        memset(dp,0x7f,sizeof(dp));
        dp[0][m]=0;
        for(int i=1;i<=n;i++){
            int x=dp[maxN][maxM];
            for(s=m;s>=0;--s)
                x=min(x,dp[i-1][s]);    
            dp[i][L[i]]=x+(m-L[i])*(m-L[i]);
            for(s=L[i]+2;s<=m;++s){
                int x=s-L[i]-1;
                if(dp[i-1][x]==dp[maxN][maxM])
                    continue;
                int y=dp[i-1][x]-(m-x)*(m-x)+(m-s)*(m-s);
                dp[i][s]=y;
            }
        }
        int ans=dp[0][maxM];
        for(s=0;s<=m;++s)
            ans=min(ans,dp[n][s]);
        printf("%d\n",ans);
    }
    return 0;    
} 

c语言版本

#include<stdio.h>
#include<memory.h>
#define maxM 108
#define maxN 10004
int f[maxM+10][maxN+10];
int L[maxN+1];
int min(int a,int b){
    if(a>b)
        return b;
    else
        return a;
}

int main()
{
    int c,i,x,y,fine;
    scanf("%d",&c);
    while(c--){
        int m,n,s;
        scanf("%d%d",&m,&n);
        for(i=1;i<=n;++i)
            scanf("%d",&L[i]);
        memset(f,0x7f,sizeof(f));
        f[0][m]=0;

        for(i=1;i<=n;i++){
            x=f[maxM][maxN];
            for(s=m;s>=0;s--)
                x=min(x,f[i-1][s]);
            f[i][L[i]]=x+(m-L[i])*(m-L[i]);

            for(s=L[i]+2;s<=m;s++){
                x=s-L[i]-1;
                if(f[i-1][x]==f[maxM][maxN])
                    continue;
                y=f[i-1][x]-(m-x)*(m-x)+(m-s)*(m-s);
                f[i][s]=y;
            }
        }

        fine=f[maxM][maxN];
        for(s=0;s<=m;s++){
            fine=min(fine,f[n][s]);
        }
        printf("%d\n",fine);
    }
    return 0;
}


  • 写回答

3条回答 默认 最新

  • orange4reg 2022-02-12 01:07
    关注

    我怀疑你是故意的吧,哪怕是复制黏贴也好啊,看得头都大了。两个代码不是一样的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月20日
  • 已采纳回答 2月12日
  • 创建了问题 2月11日

悬赏问题

  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目