zoukankan      html  css  js  c++  java
  • 砝码称重

    看到只有六个数,直接六个for循环,但总和小于等于1000并不代表它们的个数乘积小,所以80,但有一点,这样是80

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxn=1007;
    int a1,a2,a3,a5,a10,a20,ans;
    int a[maxn];
    bool vis[maxn];
    int main(){
           cin>>a1>>a2>>a3>>a5>>a10>>a20;
           for(int i=0;i<=a1;i++)
               for(int j=0;j<=a2;j++)
                   for(int k=0;k<=a3;k++)
                       for(int u=0;u<=a5;u++)
                           for(int v=0;v<=a10;v++)
                               for(int w=0;w<=a20;w++){
                                   int aa=i*1+j*2+k*3+u*5+v*10+w*20;
                                   vis[aa]=true; 
                               }
           for(int i=1;i<=1007;i++){
               if(vis[i]) ans++;
           }
           cout<<"Total="<<ans<<endl;
           return 0;
    }

    这样是64

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxn=1007;
    int a1,a2,a3,a5,a10,a20,ans,size;
    int a[maxn];
    bool vis[maxn];
    int main(){
           cin>>a1>>a2>>a3>>a5>>a10>>a20;
           for(int i=0;i<=a1;i++)
               for(int j=0;j<=a2;j++)
                   for(int k=0;k<=a3;k++)
                       for(int u=0;u<=a5;u++)
                           for(int v=0;v<=a10;v++)
                               for(int w=0;w<=a20;w++){
                                   int aa=i*1+j*2+k*3+u*5+v*10+w*20;
                                   vis[aa]=true; 
                                   size=max(aa,size);
                               }
           for(int i=1;i<=size;i++){
               if(vis[i]) ans++;
           }
           cout<<"Total="<<ans<<endl;
           return 0;
    }

    说明什么制约了复杂度(显然)

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxn=1007;
    int a1,a2,a3,a5,a10,a20,ans;
    int a[maxn];
    bool vis[maxn];
    int main(){
           cin>>a1>>a2>>a3>>a5>>a10>>a20;
           int n=a1*1+a2*2+a3*3+a5*5+a10*10+a20*20;
           for(int i=1;i<=n;i++){
               int aa=i;
               aa-=min(a20,aa/20)*20;
               aa-=min(a10,aa/10)*10;
               aa-=min(a5,aa/5)*5;
               aa-=min(a3,aa/3)*3;
               aa-=min(a2,aa/2)*2;
               aa-=min(a1,aa/1)*1;
               if(aa==0) ans++;
           }
           cout<<"Total="<<ans<<endl;
           return 0;
    }
  • 相关阅读:
    二叉排序树 常用函数小结
    二叉树的应用:二叉排序树的删除
    剑指 Offer 32
    剑指 Offer 32
    剑指 Offer 68
    剑指 Offer 28. 对称的二叉树 做题小结
    正则表达式不要背
    剑指 Offer 55
    LeetCode226. 翻转二叉树 做题小结
    Tools | 编程IED/编译器
  • 原文地址:https://www.cnblogs.com/lcan/p/9412917.html
Copyright © 2011-2022 走看看