題目描述 設有1g、2g、3g、5g、10g、20g的砝碼各若幹枚(其總重<=1000), 輸入輸出格式 輸入格式: 輸入方式:a1 a2 a3 a4 a5 a6 (表示1g砝碼有a1個,2g砝碼有a2個,…,20g砝碼有a6個) 輸出格式: 輸出方式:Total=N (N表示用這些砝碼能稱出的不同 ...
題目描述
設有1g、2g、3g、5g、10g、20g的砝碼各若幹枚(其總重<=1000),
輸入輸出格式
輸入格式:輸入方式:a1 a2 a3 a4 a5 a6
(表示1g砝碼有a1個,2g砝碼有a2個,…,20g砝碼有a6個)
輸出格式:輸出方式:Total=N
(N表示用這些砝碼能稱出的不同重量的個數,但不包括一個砝碼也不用的情況)
輸入輸出樣例
輸入樣例#1:1 1 0 0 0 0輸出樣例#1:
Total=3
應該是01背包問題,
但是暴力居然過了!
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 void read(int & n) 7 { 8 char c='+';int x=0;int flag=0; 9 while(c<'0'||c>'9') 10 { 11 c=getchar(); 12 if(c=='-') 13 flag=1; 14 } 15 while(c>='0'&&c<='9') 16 x=x*10+(c-48),c=getchar(); 17 flag==1?n=-x:n=x; 18 } 19 const int MAXN=100001; 20 int maxt,n; 21 int dp[MAXN]; 22 int a[10]; 23 int num=0; 24 int ans=0; 25 int vis[1000001]; 26 int main() 27 { 28 for(int i=1;i<=6;i++) 29 { 30 read(a[i]); 31 } 32 for(int i1=0;i1<=a[1];i1++) 33 for(int i2=0;i2<=a[2];i2++) 34 for(int i3=0;i3<=a[3];i3++) 35 for(int i4=0;i4<=a[4];i4++) 36 for(int i5=0;i5<=a[5];i5++) 37 for(int i6=0;i6<=a[6];i6++) 38 { 39 int p=i1+2*i2+3*i3+5*i4+10*i5+20*i6; 40 if(vis[p]==0&&p!=0) 41 { 42 vis[p]=1; 43 ans++; 44 } 45 } 46 printf("Total=%d",ans); 47 return 0; 48 }