Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 动态规划:硬币兑换_C++_Coin Change - Fatal编程技术网

C++ 动态规划:硬币兑换

C++ 动态规划:硬币兑换,c++,coin-change,C++,Coin Change,我的意见是: 测试用例的数量 一笔钱 作为输出,我需要: 我们拥有的不同硬币的数量和每枚硬币的价值 程序应确定是否存在解决方案,因此输出应为“是”或“否” 我使用动态编程编写了这个程序,但它只在每次输入一个测试用例时起作用。如果我一次编写200个测试用例,那么输出并不总是正确的 我假设在测试用例之间存在错误保存状态的问题。 我的问题是,我如何解决这个问题?我只是想征求一些意见 这是我的密码: #include<iostream> #include<stdio.h> #in

我的意见是:

  • 测试用例的数量
  • 一笔钱
  • 作为输出,我需要:

  • 我们拥有的不同硬币的数量和每枚硬币的价值
  • 程序应确定是否存在解决方案,因此输出应为“是”或“否”

    我使用动态编程编写了这个程序,但它只在每次输入一个测试用例时起作用。如果我一次编写200个测试用例,那么输出并不总是正确的

    我假设在测试用例之间存在错误保存状态的问题。 我的问题是,我如何解决这个问题?我只是想征求一些意见

    这是我的密码:

    #include<iostream>
    #include<stdio.h>
    #include<string>
    
    #define max_muenzwert 1000
    
      using namespace std;
    
    
      int coin[10];//max. 10 coins
      int d[max_muenzwert][10];//max value of a coin und max. number of coins
    
      int tabelle(int s,int k)//computes table
      {   
        if(d[s][k]!=-1) return d[s][k];
        d[s][k]=0; 
    
        for(int i=k;i<=9&&s>=coin[i];i++)
          d[s][k]+=tabelle(s-coin[i],i);
    
    
        return d[s][k];
     }
    
     int main()
    
     {
        int t;
        for(cin>>t;t>0;t--)//number of testcases
    
         {        
    
                    int n;   //value we are searching   
               scanf("%d",&n)==1;             
              int n1;              
    
        cin>>n1;//how many coins
    
        for (int n2=0; n2<n1; n2++)
        {
            cin>>coin[n2];//value of coins
            }
    
        memset(d,-1,sizeof(d));//set table to -1
    
        for(int i=0;i<=9;i++)
        {
                 d[0][i]=1;//set only first row to 1 
                 }
    
          if(tabelle(n,0)>0) //if there's a solution
          {
                        cout<<"yes"<<endl;
    
                        }
          else //no solution
          {
               cout<<"no"<<endl;
    
          }
    
    
    
    
    
          }
          //system("pause");
    return 0;
    }
    
    #包括
    #包括
    #包括
    #定义最大值为1000
    使用名称空间std;
    国际货币[10]//最多10枚硬币
    国际数据[max_muenzwert][10]//硬币的最大价值和硬币的最大数量
    int tabelle(ints,intk)//计算表
    {   
    如果(d[s][k]!=-1)返回d[s][k];
    d[s][k]=0;
    for(inti=k;i=coin[i];i++)
    d[s][k]+=tabelle(s-coin[i],i);
    返回d[s][k];
    }
    int main()
    {
    int t;
    for(cin>>t;t>0;t--)//测试用例数
    {        
    int n;//我们正在搜索的值
    scanf(“%d”,&n)==1;
    int-n1;
    cin>>n1;//多少硬币
    对于(int n2=0;n2>硬币[n2];//硬币的价值
    }
    memset(d,-1,sizeof(d));//将表设置为-1
    for(int i=0;i0)//如果有解决方案
    {
    cout
    for(int i=k;i=coin[i];i++)
    d[s][k]+=tabelle(s-coin[i],i);
    
    在这里,如果
    coin[i]
    ,则整个循环将中断,而您只需跳过此硬币

    另外,请注意正确的代码格式。

    for(inti=k;i=coin[i];i++)
    d[s][k]+=tabelle(s-coin[i],i);
    
    在这里,如果
    coin[i]
    ,则整个循环将中断,而您只需跳过此硬币


    请注意,请注意正确的代码格式。

    正如您看到的,您有不同数量的硬币,您正在使用这一行输入:
    cin>>n1;//有多少硬币
    。但是在
    选项卡
    方法中,您总是循环通过
    0-9
    ,这是错误的。您应该只循环通过
    0-n1
    。请尝试此测试用例:

    2 10 2 2 5 10 1 9 2. 10 2. 2 5 10 1. 9
    对于第二个测试集,您的答案应该是
    ,但您的程序会说
    ,因为它会在硬币数组的第二个元素中找到5。

    正如您所看到的,您有不同数量的硬币,您正在使用以下行进行输入:
    cin>>n1;//有多少硬币
    。但是在
    选项卡
    方法中总是循环通过
    0-9
    ,这是错误的。您应该只循环通过
    0-n1
    。尝试此测试用例:

    2 10 2 2 5 10 1 9 2. 10 2. 2 5 10 1. 9
    对于第二个测试集,您的答案应该是
    no
    ,但您的程序会说
    yes
    ,因为它会在硬币数组的第二个元素中找到5。

    测试用例是否可能一起运行?例如,您的
    scanf(“%d”,…)
    将获取第一个连续的十进制数字字符串。我讨厌人们问问题,然后就不关心它了!我的回答解决了你的问题吗?:)@sowrov很抱歉没有回答,我找到了另一种方法,我几乎删除了这段代码。但是如果你想查看工作代码,如果你想查看,我可以发布它。谢谢你的帮助测试用例是否可能一起运行?例如,你的
    scanf(“%d”,…)
    将获取第一个连续的十进制数字字符串。我讨厌人们问问题,然后就不关心它了!我的回答解决了你的问题吗?:)@sowrov很抱歉没有回答,我找到了另一种方法,我几乎删除了此代码。但是如果你想查看工作代码,如果想查看,我可以发布它。感谢您的帮助顺便说一句,在同一个项目/源上只能使用scanf或cin,但不能同时使用两者。因为它们不兼容,
    cin
    对象很可能使用缓冲读取,在您需要输入之前读取输入,因此
    scanf
    将无法从输入源读取任何内容。顺便说一句,也可以只使用scanf或者只有cin,但不能同时在同一项目/源上。因为它们不兼容,
    cin
    对象很可能使用缓冲读取,在需要输入之前读取输入,因此
    scanf
    将无法从输入源读取任何内容。