题目1209:最小邮票数

来源:互联网 发布:mac mysql 密码修改 编辑:程序博客网 时间:2024/05/06 01:13

动态规划问题,递推公式dp[i][j]=min(dp[i-1][j],dp[i-1][j-s[i]]+1)。需要注意的是数组从大到小排序,然后要注意dp[i][s[i]]=1 。

C++代码:

#include<iostream>#include<algorithm>#include<limits.h>#include<memory.h>using namespace std;int dp[21][101];bool cmp(int a,int b){return a>b;}int main(){freopen("1.txt","r",stdin);int m,n,s[21];while(cin>>m>>n){memset(dp,0x0f,sizeof(dp));memset(s,0,sizeof(s));for(int i=n-1;i>=0;i--)cin>>s[i];if(s[0]<=m)dp[0][s[0]]=1;for(int i=1;i<=n;i++){for(int j=m;j>=0;j--){if(j>=s[i])dp[i][j]=min(dp[i-1][j],dp[i-1][j-s[i]]+1);elsedp[i][j]=dp[i-1][j];}dp[i][s[i]]=1;//very important}if(dp[n-1][m]>21)dp[n-1][m]=0;cout<<dp[n-1][m]<<endl;}return 0;}


0 0
原创粉丝点击