本文共 714 字,大约阅读时间需要 2 分钟。
#include#include #include using namespace std;int dp[1000][1000];int path[1000][1000];int a[100];int main(){ int n,sum; while(~scanf("%d%d",&n,&sum)) { for(int i = 1;i <= n;i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); memset(path,0,sizeof(path)); for(int i = 1;i <= n;i++) { for(int j = sum;j >= a[i];j--) { if(dp[i][j] < dp[i-1][j-a[i]] + a[i]) { path[i][j] = 1; dp[i][j] = dp[i-1][j-a[i]] + a[i];// cout< <<" "< < =1;i--) { if(path[i][j] == 1&&j>=0) { printf("%d ",a[i]); j-=a[i]; } } }}
转载地址:http://rbsgi.baihongyu.com/