可能な限り最小限の変更量を与える必要があります。ケースの数を入力します。各ケースには、コインの数 (1 は必ずしもそれらの一部であるとは限りません) と、テストしたい数の数が含まれていました。次に、さまざまなコインを入力します。テストする別の数。
私のプログラムが動かない理由がわかりません。 1 は必ずしも変更の一部ではないため、プログラムを少し調整する必要がありました。
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<functional>
#include<numeric>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int n,i;
cin>>n;
int f=n,c,m;
int flag=0;
int m1;
int coins[100];
vector <int>storage(100,0);
vector <int> testcases(1000,0);
vector <int> answers(1000,-1);
while(n>0)
{
cin>>c;
cin>>m;
for(i=1;i<=c;i++)
{
cin>>coins[i];
}
for(i=1;i<=c;i++)
{
cin>>testcases[i];
}
m1=*max_element(testcases.begin(),testcases.end());
for(i=0;i<1000;i++)
{
answers[i]=-1;
}
i=0;
while(m1>=i)
{
i++;
flag=0;
for(int j=1;j<=c;j++)
{
if(i-coins[j]>=0)
{
storage[j]=answers[i-coins[j]];
flag=1;
}
else
storage[j]=-2;
}
if(flag==1)
{answers[i]=*min_element(begin(storage), end(storage),
[](int t1, int t2) {return t1 > 0 && (t2 <= 0 || t1 < t2);});
flag=0;
}
else
answers[i]=0;
}
if(m1==i)
{
for(int y=1;y<=m;y++)
{
cout<<answers[testcases[y]]<<endl;
}
}
}
return 0;
}
編集:「機能しない」とは、実際には何もしないことを意味します。入力を受け取り、何もしません。無限ループに入ると思います。