首页 > 其他分享 >HDU 4507 (数位dp)

HDU 4507 (数位dp)

时间:2023-02-13 16:37:00浏览次数:43  
标签:HDU int cnt pos 4507 ans dp 数位

HDU 4507 (数位dp)

题意

一个数满足以下三个条件之一,则被认为与7有关。

1、整数中某一位是7;

2、整数的每一位加起来的和是7的整数倍;

3、这个整数是7的整数倍;

求区间[L,R] 内与7无关的数的平方和。

思路

以往的数位dp都是求个数,这次是求平方和。
怎么想到当前位与下一位的关联???
一点头绪都没有,跑去看题解,发现了新大陆。
假设当前位pos填了数字i,之后pos+1到末尾可以满足题意的数共有cnt个,分别为num1,num2,num3....,则它们的贡献为

\(\sum_{j=1}^{cnt}(i*p[pos]+num[j])^2\),

p[pos]表示10的pos次方,然后去掉括号就变成

\[cnt*(i*p[pos])^2+\sum_{j=1}^{cnt}num[j]^2+2*(i*p[pos])*\sum_{j=1}^{cnt}num[j] \]

所以转移时维护三个变量,满足题意的个数cnt、这些数的和以及平方和。

代码

node dfs(int pos,int val,int dval,int limit)//位置,数本身余7,数位和余7
{
	if(!pos) 
	{
		node ans={0,0,0};
		if((val%7)&&(dval%7)) ans.cnt++;
		return ans;
	}
	if(!limit&&f[pos][val][dval].cnt!=-1) return f[pos][val][dval];
	node ans={0,0,0};
	int up=limit?a[pos]:9;
	for(int i=0;i<=up;i++)
	{	
		if(i==7) continue;
		node ne=dfs(pos-1,(val*10+i)%7,(dval+i)%7,limit&&(i==up));
		int s1=i*p[pos-1]%mod,s2=s1*s1%mod;
		ans.cnt = (ans.cnt+ne.cnt)%mod;
		ans.sum = (ans.sum+ne.cnt*s1)%mod;
		ans.sum = (ans.sum+ ne.sum) %mod;
		ans.sqsum = (ans.sqsum + ne.cnt*s2%mod)%mod;
		ans.sqsum = (ans.sqsum + (2*s1%mod)*ne.sum%mod)%mod;
		ans.sqsum = (ans.sqsum + ne.sqsum)%mod;
	}
	if(!limit) f[pos][val][dval]=ans;
	return ans;

}

需要取模的题不要嫌烦,少一个mod可能都会wa

标签:HDU,int,cnt,pos,4507,ans,dp,数位
From: https://www.cnblogs.com/LIang2003/p/17116813.html

相关文章

  • dp
    121.买卖股票的最佳时机-力扣(LeetCode)classSolution{public:intmaxProfit(vector<int>&prices){intmax=0;for(inti=0;i<prices.size(......
  • HDU 3709 数位dp
    HDU3709(数位dp)题意求区间[L,R]内满足以下性质的数:选定该数的一个位置,左右两边的力矩相等,如4139,选取'3'这位,左边4×2+1×1=9×1.思路一开始想着枚举每个点来做,......
  • C - Cake HDU - 1722 (数学)
    题意:就是一个蛋糕,被分成n或者m份。问最少动几刀。看一下这个图,就知道公式了,n+m-gcd(n,m);#include<cstdio>#include<iostream>usingnamespacestd;#definelllon......
  • 【学习笔记】数位 dp 学习笔记
    被这个东西薄纱了。顾名思义,树上的动态规划即树形动态规划。P1352没有上司的舞会经典题!设\(f_{i,0/1}\)表示第\(i\)个节点,选或不选自己的最优情况。显然有方程......
  • 状态压缩dp
    最短Hamilton路径给定一张n个点的带权无向图,点从0∼n−1标号,求起点0到终点n−1的最短Hamilton路径。Hamilton路径的定义是从0到n−1不重不漏地经过每个点......
  • 【notedpad++结合HEX-Editor插件】的替代品【vscode+HEX Editor插件】
    近期由于一些原因,notepad++作者违背了开源精神,想必大家也在寻找notedpad++的替代品。之前由于UE需要付费,于是使用了【notedpad++结合HEXDump插件】来为文件十六进制......
  • HDU 4389 数位dp
    HDU4389(数位dp)题意求一个区间内[L,R]内有多少个数满足:它的数位和能整除它本身。思路按照一般数位dp的套路,多出来的参数无非就是数位和以及这个数本身,但如果直接这......
  • HDU 1024 Max Sum Plus Plus
    题目大意:给定一个长度为\(n\)数组,求划分成\(m\)段不相交区间的子段和最大值得问题那么需要考虑得就是对于第i个数字,是否选中它在m个区间中,以及如果选中它那么它在第几个......
  • 树形dp
    没有上司的舞会Ural大学有N名职员,编号为1∼N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数Hi给出,其中1≤i≤N......
  • Python引入模块报错:Import "openai" could not be resolvedPylancereportMissingImpor
    复制Openai的代码进行测试的时候,发生:Import"openai"couldnotberesolvedPylancereportMissingImports  以为是安装问题,检查安装,发现没有这个模块: 直接进行......