PE 31(简单DP)
二维
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int a[10]={0,1,2,5,10,20,50,100,200}; 6 int dp[10][300]; 7 for(int i=1;i<=8;i++){ 8 dp[i][0]=1; 9 } 10 for(int i=1;i<=8;i++){ 11 for(int j=1;j<=200;j++){ 12 if(j>=a[i])dp[i][j]=dp[i-1][j]+dp[i][j-a[i]]; 13 else dp[i][j]=dp[i-1][j]; 14 } 15 } 16 cout<<dp[8][200]<<endl; 17 return 0; 18 }
一维
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int a[10]={0,1,2,5,10,20,50,100,200}; 6 int dp[300]={0}; 7 dp[0]=1; 8 for(int i=1;i<=8;i++){ 9 for(int j=0;j<=200;j++){ 10 dp[j+a[i]]+=dp[j]; 11 } 12 } 13 cout<<dp[200]<<endl; 14 return 0; 15 }

浙公网安备 33010602011771号