UVa 11361 Investigating Div-Sum Property / 数位DP

先上代码 以后再说

#include <cstdio>
#include <cstring>
const int maxn = 110;
int dp[maxn][maxn][maxn];
int ok(int x, int k)
{
	if(x < 10)
		return x / k;
	int a = x;
	int b = 1;
	int l = 0;
	while(a)
	{
		l++;
		a /= 10;
		b *= 10;
	}
	b /= 10;
	//printf("%d %d\n", a, b);
	int ret = 0;
	int m1 = 0, m2 = 0;
	int d = 1;
	while(l--)
	{
		int c = x / b;
		//printf("%d\n", c);
		if(l == 0)
		{
			for(int j = 0; j <= c; j++)
				if(((k-j-m1)%k+k)%k == 0 && ((k-j-m2)%k+k)%k == 0)
					ret++;
			break;
		}
		for(int j = 0; j < c; j++)
			ret += dp[l-1][((k-j-m1)%k+k)%k][((k-j*b-m2)%k+k)%k];
		//	printf("%d\n", c);
		m1 += c;
		m2 += c*b;
		x -= c*b;
		b /= 10;
	}
	return ret-1;
}
int main()
{
	int T;
	int a, b, k;
	scanf("%d", &T);
	while(T--)
	{
		scanf("%d %d %d", &a, &b, &k);
		if(k > 82)
		{
			printf("0\n");
			continue;
		}
		int c = a, d = 1;
		memset(dp, 0, sizeof(dp));
		for(int i = 0; i < 10; i++)
			dp[0][i%k][i%k]++;
		for(int i = 1; i <= 10; i++)
		{
			d *= 10;
			if(d * 10 > b)
			{
				//printf("%d\n", d);
				break;
			}
			for(int m1 = 0; m1 < k; m1++)
			{
				for(int m2 = 0; m2 < k; m2++)
				{
					for(int j = 0; j < 10; j++)
					{
						dp[i][((m1+j)%k+k)%k][((m2+j*d)%k+k)%k] += dp[i-1][m1][m2];
					}
				}
			}
		}	
		printf("%d\n", ok(b,k)-ok(a-1,k));
	}
	return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
研究双层优化在学习和视觉中的应用,是为了改善学习算法和视觉系统的性能。在学习和视觉任务中,我们通常面临两个层面的优化问题。 第一层优化问题涉及到学习算法的优化,即如何通过合适的学习算法来获得最佳的模型参数。学习算法的优化过程通常涉及到定义损失函数和选择合适的优化方法。然而,常规的优化方法在高维问题中可能会面临挑战,导致在学习过程中陷入局部最优解。因此,研究者们开始探索使用双层优化方法来改进学习算法的性能。双层优化方法通过引入内部优化循环来进一步更新学习算法中的超参数,以改善模型性能。这种方法可以更好地探索参数空间,寻找更优的模型参数,从而提高学习算法的效果。 第二层优化问题涉及到视觉任务的优化,即如何通过图像处理和计算机视觉算法来解决具体的视觉问题。视觉任务可以包括目标检测、图像分割、姿态估计等多个方面。传统的视觉算法通常是通过定义特定的目标函数并使用迭代方法来进行优化。然而,这种方法可能会受到参数选择和初始条件的限制。因此,研究者们开始研究使用双层优化技术来提高视觉任务的性能。双层优化方法通过引入内部优化循环来逐步调整算法超参数和模型参数,以更好地适应特定的视觉任务。 总之,研究双层优化在学习和视觉中的应用,旨在改善学习算法和视觉系统的性能。这种方法可以通过优化学习算法的参数和模型参数,以及优化视觉任务的目标函数和算法参数,来改进学习和视觉的效果。这将有助于在学习和视觉领域取得更好的结果和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值