vijos P2026 几乎奇偶等和数 数位dp 好题
来源:互联网 发布:html5上传文件表单php 编辑:程序博客网 时间:2024/06/05 16:45
题意:
我们称一个整数是奇偶等和数,是说它的数位个数是偶数(比如二位数,四位数,六位数等,且特殊说明 0 是一位数字),且其中所有奇数位数字之和恰好等于所有偶数位数字之和。
我们称一个整数是几乎奇偶等和数,是说在恰好修改其中一位数字后,得到的新数字是一个奇偶等和数。这里说恰好修改一位数字,要求必须发生了实质性修改,也就是说修改后的数字必须与之前的数字不同(例如将1234修改为1234就是不合法的,因为修改后的数字和之前是一样的);同时要求不能将最高位修改为 0。
现在给定整数 A和 B,问有多少几乎奇偶等和数 x 满足 A≤x≤B。
思路:
首先明确这个题目一定要修改某一位才行,也就是说原本的奇偶位的和不等,并且数位长度为偶数,那么肯定对于这些东西我们都需要开一个变量来记录的.
难点在于怎么修改,我们可以这样考虑.考虑偶数为的和跟奇数位和的差值,那么如果当前差为正值,说明偶数位和大,那么我们需要修改奇数某一位,可以发现修改某一位的值他的差值变化是在一个范围之内的,每次要么把最小的修改成最大的,或者把最大的修改成最小的(注意首位不能为0),这样就可以使差值在一个范围然后判断一下就好了.奇数位和大同理.
注意奇数位变小使得差值变大,变大使得差值变小,偶数位反之.
#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+5;typedef long long ll;ll dp[10][101][10][10][10];// 数位,偶数和奇数的差,对差影响的正值,对差影响的负值,长度.int bit[30];int a,b;int dfs(int pos,int sum,int zheng ,int fu,int flag,int bt){ if(pos == 0) return bt%2 == 0 && sum != 0 && ( sum*(sum+zheng) <= 0 || sum*(sum-fu) <= 0); if(flag && dp[pos][sum+50][zheng][fu][bt] != -1) return dp[pos][sum+50][zheng][fu][bt]; int up = flag ? 9 : bit[pos]; ll ans = 0; for(int i = 0;i <= up;++i) { if(bt == 0) {//前导0 if(i == 0) ans += dfs(pos-1,0,0,0,flag || i != up,0); else ans += dfs(pos-1,sum-i,i-1,9-i,flag || i != up,1); } else { if(bt&1) ans += dfs(pos-1,sum+i,max(zheng,9-i),max(fu,i),flag || i != up,bt+1); else ans += dfs(pos-1,sum-i,max(zheng,i),max(fu,9-i),flag || i != up,bt+1); } } if(flag) dp[pos][sum+50][zheng][fu][bt] = ans; return ans;}ll solve(int x){ if(x <= 0) return 0; int len = 0; while(x) { bit[++len] = x % 10; x /= 10; } return dfs(len,0,0,0,0,0);}int main(){ memset(dp,-1,sizeof dp); while(~scanf("%d %d",&a,&b)) { printf("%lld\n",solve(b) - solve(a-1)); } return 0;}/*1 3351 7810 99*/
阅读全文
0 0
- vijos P2026 几乎奇偶等和数 数位dp 好题
- vijos P2026 几乎奇偶等和数 [数位dp]【动态规划】
- hdu 3943 经典数位dp好题
- cf 55D 数位dp 好题
- poj 3971 Scales (数位dp,好题)
- hdu 1633 数位DP 好题
- hdu 4507 数位dp(好题)
- hihocoder1033-数位dp&数位求和&好题-交错和
- codeforce 55 D. Beautiful numbers(数位dp,好题)
- [HDU]4507 恨7不成妻 数位Dp好题
- POJ-3252 Round Numbers (数位dp 好题)
- 蓝桥杯 K好数(数位DP)
- hdoj matrix 5569 (奇偶DP) 好题 向右下走取使方程值最小
- 数位DP之找等凹数字
- 数位DP入门题
- hdoj Bomb 3555 (数位DP&记忆化dfs)好题
- HDU - 3709 Balanced Number (数位DP&记忆化dfs)好题
- HDU - 4352 XHXJ's LIS (数位DP&记忆化dfs&位运算)好题
- 香港科技大学TensorFlow速成(1)
- 勇者斗恶龙(The Dragon Loowater,UVA 11292)
- 使用Fiddler为手机抓包
- 还说不会爬虫?点了就能爬的爬虫源代码,不信?你试试?
- RNN入门与实践
- vijos P2026 几乎奇偶等和数 数位dp 好题
- oracle rda
- 在/etc/ld.so.config中如何正确配置动态链接库路径
- android studio创建9.patch图片,使用时出现Error: Duplicate resources
- 机器学习资源整理(视频、书籍、链接)
- 步伐多慢无关紧要,只要你坚持不懈
- Concurrent.util 常用类的介绍和使用
- java工程师面试题_2年经验
- 对象池实操(一)_发射子弹简单演示