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 }

 

posted @ 2018-06-09 15:17  ghblw  阅读(186)  评论(0)    收藏  举报