連接ios
分析:來看看揹包九講裏面的一段話:ide
對於一個給定了揹包容量、物品費用、物品間相互關係(分組、依賴等) 的揹包問題,除了再給定每一個物品的價值後求可獲得的最大價值外,還能夠得 到裝滿揹包或將揹包裝至某一指定容量的方案總數。對於這類改變問法的問題,通常只需將狀態轉移方程中的max改爲sum便可。例如若每件物品均是徹底揹包中的物品,轉移方程即爲:spa
dp[i][j]=dp[i-1][j]+dp[i-1][j-v[i]],由於必須是由這兩個狀態轉換過來的,邊界是dp[0][0]=1,因此這道題的代碼以下code
1 #include "iostream" 2 #include "cstdio" 3 #include "cstring" 4 #include "string" 5 using namespace std; 6 const int maxn=1e6+100; 7 int n,V; 8 int a[110]; 9 long long dp[maxn]; 10 int main() 11 { 12 cin>>n>>V; 13 for(int i=1;i<=n;i++) 14 cin>>a[i]; 15 dp[0]=1; 16 for(int i=1;i<=n;i++) 17 for(int j=a[i];j<=V;j++) 18 dp[j]=dp[j]+dp[j-a[i]]; 19 cout<<dp[V]<<endl; 20 }