Uva-624-CD

来源:互联网 发布:dota视频软件 编辑:程序博客网 时间:2024/05/16 05:58

这个题是说给你一个序列,让你从其中选出一些数,然后得到最接近题目所给的一个数,并需要输出所选的数

用二维数组保存所选择的数~

代码:


#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=10001;int n,m,a[30],dp[maxn];bool vis[maxn][30];int main(){    while(scanf("%d%d",&n,&m)!=EOF)    {memset(vis,0,sizeof(vis));memset(dp,0,sizeof(dp));for(int i=0;i<m;i++)    scanf("%d",&a[i]);for(int i=0;i<m;i++)    for(int j=n;j>=a[i];j--)if(dp[j]<=dp[j-a[i]]+a[i]){    dp[j]=dp[j-a[i]]+a[i];    vis[j][i]=1;}for(int i=m-1,j=n;i>=0;i--){    if(vis[j][i])    {printf("%d ",a[i]);j-=a[i];    }}printf("sum:%d\n",dp[n]);    }    return 0;}


原创粉丝点击