砝码称重
看到只有六个数,直接六个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; }