C++ 如何使用动态规划求解
这里有一个指向spoj问题的链接 我是解决Dp问题的初学者 虽然我找到了一些模式,但我无法有效地使用它 我尝试过天真的方法,但这肯定会让我失望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
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回答!!:(