砝码称重

看到只有六个数,直接六个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;
}
原文地址:https://www.cnblogs.com/lcan/p/9412917.html