zoukankan      html  css  js  c++  java
  • zoj 3706 Break Standard Weight

    /*题意:将两个砝码中的其中一个分成两块,三块组合最多有几种情况(可以只有一块,或者两块)。 
    组合情况 i j m 三块砝码
    (i+j)-m=m-(i+j) i+j i-j=j-i  i j m
    (i+m)-j=j-(i+m) i+m i-m=m-i   i+j+m
    (j+m)-i=i-(j+m) j+m j-m=m-j
    */
    #include<string.h>
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int he[405];/*砝码组合质量之和作为序号,来判断改质量是否已经访问过(防止有相同的质量再次使用)*/
    int solove(int n,int m);
    int main(int argc, char* argv[])
    {
        int t,n,m,h,max;   
        
        scanf("%d",&t);
        while(t--)
        {
            
            scanf("%d%d",&n,&m);
            
            max=solove(n,m);/*当分n的时候,得到最大情况数量*/
            h=solove(m,n);/*当分m的时候,得到最大情况数量*/
            if(max<h)
                max=h;
            printf("%d
    ",max);
            
        }
        return 0;
    }
    int solove(int n,int m)
    {
        int i,j,max,count,t;
        max=count=0;
        for(i=1;i<=(n+1)/2;i++)/*因为1-n最后会有一半左右重复*/ 
                {
                        memset(he,0,sizeof(he));/*每一次砝码新的分法,这个数组需重新初始化*/ 
                        count=0;
                           j=n-i;
                           
                           t=i+j+m;
                        if(he[t]==0)
                        {he[t]=1;count++;}/*如果这个质量没有访问过组合数就加1,然后设置访问过*/ 
                        
                        t=abs(i+j-m);
                        if(he[t]==0)
                        {he[t]=1;count++;}
                        
                        t=abs(j+m-i);
                        if(he[t]==0)
                        {he[t]=1;count++;}
                        
                        t=abs(m+i-j);
                        if(he[t]==0)
                        {he[t]=1;count++;}
                        
                        t=i+m;
                        if(he[t]==0)
                        {he[t]=1;count++;} 
                        
                        t=i+j;
                        if(he[t]==0)
                        {he[t]=1;count++;}
                        
                        t=j+m;
                        if(he[t]==0)
                        {he[t]=1;count++;}
                        
                        t=abs(i-j);
                        if(he[t]==0)
                        {he[t]=1;count++;}
                        
                        t=abs(i-m);
                        if(he[t]==0)
                        {he[t]=1;count++;}
                        
                        t=abs(j-m);
                        if(he[t]==0)
                        {he[t]=1;count++;}
                        
                        t=i;
                        if(he[t]==0)
                        {he[t]=1;count++;}    
                        
                        t=j;                                            
                        if(he[t]==0)
                        {he[t]=1;count++;}
                        
                        t=m;
                        if(he[t]==0)
                        {he[t]=1;count++;}
                        
                        if(he[0]==1)/*如果有组合的结果是0,就不算在内*/
                        count--;
                        
                        if(max<count)
                        max=count;
                }
        return max;
    }
  • 相关阅读:
    Asp.net MVC3 Routing study
    Sharepoint 站点页面错误问题
    vc2010 学习笔记1
    UML类成员的困惑
    河道二维水流模拟高精度算法研究
    朱庆:真三维GIS技术进展
    map
    SIGGRAPH 2010: 一场视觉盛宴[转]
    新网站开张,欢迎大家
    获取其它进程内EDIT BOX内容的一种方法
  • 原文地址:https://www.cnblogs.com/woshijishu3/p/3592565.html
Copyright © 2011-2022 走看看