自分が出したい結果が逆順に出力されます。
プログラムの内容は以下のとおりです。
n個の正整数 a1......anと n個の正整数 が入力されたとき、この ai (1<= i <= n)のいくつかの和bを作ります。例えば、3,2,8,7,4で12を作ることを考えたら、3+2+7 = 12 or 8+4 = 12とできます。
入力 5 12 3 2 8 7 4 出力 YES 3 2 7 (ここが 7 2 3 になります)
C
1#include <stdio.h> 2#include <stdlib.h> 3 4int main(){ 5 int n,b,i,j; //正整数b, n個の正整数a 6 int *dp,*a; 7 scanf("%d",&n); 8 scanf("%d",&b); 9 10 a = (int *)malloc(n * sizeof(int)); 11 dp = (int *)malloc(b * sizeof(int)); 12 13 for(i = 1; i<= b ;i++) dp[i] = -1; 14 15 for(i = 0; i< n ;i++) scanf("%d",&a[i]); 16 17 for(i = 0;i < n; i++){ 18 for(int j = b-1;j >= 0; j--){ 19 if(dp[j]!=-1){ 20 if(a[i] + j <= b && dp[a[i] + j] == -1){ 21 22 dp[a[i] + j] = a[i]; 23 24 } 25 } 26 } 27 } 28 29 if(dp[b]==-1){ 30 31 printf("ERROR\n"); 32 return 0; 33 } 34 35 printf("YES\n"); 36 37 int ans = b; 38 39 while(1){ 40 printf("%d ",dp[ans]); 41 ans = ans - dp[ans]; 42 if(ans == 0)break; 43 } 44 45 printf("\n"); 46 return 0; 47}
回答1件
あなたの回答
tips
プレビュー