C语言一菜鸟级


私信TA

用户名:LHL

访问量:63149

签 名:

AC总是意料之外 ^_^

等  级
排  名 47
经  验 11164
参赛次数 5
文章发表 56
年  龄 24
在职情况 在职
学  校 四川工商学院
专  业 通信工程

  自我简介:

C语言 蓝桥杯 ACM 新人 欢迎大佬 前来指导 交流 本人 博客https://fivecc.blog.csdn.net/

解题思路: gcd + 动态规划(完全背包)

注意事项: 

参考代码:


 

#include<stdio.h>
#include<string.h>
 int gcd(int a,int b)
 {  if(b==0)return a;
     else return gcd(b,a%b);
 }
 int main()
 {
  int n,t,i,m,a,b;long long int j,ans,t1;int s[20]; long int dp[80003];
  scanf("%d",&n);
  scanf("%d",&s[0]);
    t=s[0];
   for(i=1;i<n;i++)
   { scanf("%d",&s[i]);
     t=gcd(t,s[i]); //找最大公约数,为1表示有解否则表示所有数都可以到达  
     if(s[i]<s[0]){int m=s[0];s[0]=s[i];s[i]=m;}
     
   }
 if(t==1&&s[0]!=1)//gcd判断 是否有解 为1 则这有解
 {    memset(dp,-1,sizeof(dp));t1=0;dp[0]=1;
      for(i=0;i<n;i++)
//(感觉按题目要求应该是20000000000的不过感觉也去不到那么远)*/  
      for(j=s[i];j<80000;j++)
        {if(dp[j-s[i]]!=-1)dp[j]=1;
         if(i==n-1&&dp[j]==1)//最后判断
{t1++;if(t1>=s[0])break;}
          else t1=0,ans=j;
        }
        if(ans==79999)ans=s[0]-1;//如果达到上限值则 最小值前面为最大体积
         printf("%ld\n",ans); 
}
 else printf("0\n");  
 return 0;
 }


 

0.0分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区