Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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++ - Fatal编程技术网

C++ 如何使用动态规划求解

C++ 如何使用动态规划求解,c++,C++,这里有一个指向spoj问题的链接 我是解决Dp问题的初学者 虽然我找到了一些模式,但我无法有效地使用它 我尝试过天真的方法,但这肯定会让我失望 void cal(int *a,int n) { while(n!=0) { a[n%10]++; n/=10; } } void print(int *a) { int ans=0; for(int i=1;i<=9;i++) { ans

这里有一个指向spoj问题的链接

我是解决Dp问题的初学者

虽然我找到了一些模式,但我无法有效地使用它

我尝试过天真的方法,但这肯定会让我失望

void cal(int *a,int n)
{
    while(n!=0)
    {
         a[n%10]++;
         n/=10;
    }
}

void print(int *a)
{
    int ans=0;
    for(int i=1;i<=9;i++)
    {
            ans+=i*a[i];
    }
    printf("%d\n",ans);
}
void-cal(int*a,int-n)
{
而(n!=0)
{
a[n%10]++;
n/=10;
}
}
无效打印(int*a)
{
int ans=0;

对于(int i=1;i我将尝试给您一些提示,而不是为您解决整个问题:

  • 不要编写在区间
    [a,b]
    中计算和的函数,而应编写在区间
    [0,x]
    中计算和的函数,然后:

    SUM([a,b]) = SUM([0, b]) - SUM([0, a-1])
    
  • 为了计算达到给定限制的数字之和,对于每个数字
    d
    ,计算在达到
    L
    的所有数字中它作为一个数字出现的次数。为了计算
    d
    作为单位数字出现的次数,它作为十位数出现的次数,依此类推

一个技巧:编写一个函数
f
来计算最多
a
的数字之和,然后将[a,b]中的数字之和打印为
f(b)-f(a-1)
是的,我也做了同样的事情..但它会给出TLE..因为数字太大!!而且需要很多时间..我从来没有说过如何编写这个函数。你可以制作一个比约束更大的n值的解决方案。我已经为n解决了这个问题。你能给出一些关于编写该函数的提示吗?试着编写一个c计算你有多少次1表示单位数字,多少次表示十等。然后将函数推广到其他数字。对于每个数字,将其出现的次数乘以其值。累加这些,你就有了答案。太棒了…Thanx..明白了!!现在就试着编码!!对不起,我没有声誉..不能投票给你r回答!!:(