3 20 20 20樣例輸出
3
枚舉,最大2^20.
遞歸求解
3 20 20 20樣例輸出
3
枚舉,最大2^20.
遞歸求解
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
int a[50];
int way(int w, int k)
{
if(w==0) return 1;
if(k==0) return 0;
else
return way(w, k-1)+way(w-a[k], k-1); //無限的循環,什麼時候纔是結尾(蛇吞尾)
}
int main()
{
memset(a, 0, sizeof(a));
int n;
cin>>n;
for(int i=1; i<=n; i++)
cin>>a[i];
cout<<way(40, n)<<endl;
return 0;
}
//動規方法求解
#include<iostream>
using namespace std;
int a[50];
int way[50][50]; //way[w][k]表示 k個元素組成w的方法數
int main()
{
int n;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>a[i];
way[0][i]=1;
}
way[0][0]=1;
for(int w=1; w<=40; w++)
for(int k=1; k<=n; k++)
{
way[w][k]=way[w][k-1]; //?
if(w-a[k]>=0)
{
way[w][k]+=way[w-a[k]][k-1]; //miracle
}
}
cout<<way[40][n];
return 0;
}