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 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大