2017"百度之星"程序设计大赛 - 复赛1005&&HDU 6148 Valley Numer【数位dp】
Valley Numer
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 311 Accepted Submission(s): 165
它最近发明了一种新的数字:Valley Number,像山谷一样的数字。

当一个数字,从左到右依次看过去数字没有出现先递增接着递减的“山峰”现象,就被称作 Valley Number。它可以递增,也可以递减,还可以先递减再递增。在递增或递减的过程中可以出现相等的情况。
比如,1,10,12,212,32122都是 Valley Number。
121,12331,21212则不是。
度度熊想知道不大于N的Valley Number数有多少。
注意,前导0是不合法的。
每组数据包含一个数N。
● 1≤T≤200
● 1≤length(N)≤100
非常经典的数位DP,可以将状态设计成四维
当前数字长度len最后一位数字digit;是否已经在递增序列里increased是否和当前前缀相同same_prefix
转移时处理好这些状态就好了。
java代码,还望dalao们海涵QAQ
下面给出AC代码:
import java.util.Scanner;
public class Main {
/**
* @param args
*/
public static long MOD = 1000000007L;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String t = sc.nextLine();
int T = Integer.parseInt(t);
while (T-- != 0){
String N = sc.nextLine();
long[][][][] dp = new long[220][10][2][2];
int tnum = N.charAt(0) - '0';
for(int i = 1; i < tnum ; i++){
dp[0][i][0][0] = 1;
}
dp[0][tnum][1][0] = 1;
int len = N.length() -1;
for(int i = 1 ; i <= len ; i++){
tnum = N.charAt(i) - '0';
for(int j = 0 ; j < 10 ; j ++){
if(j !=0 ){
dp[i][j][0][0] ++;
dp[i][j][0][0] %= MOD;
}
for(int k = 0 ; k < 10 ;k ++){
if(j <= k){
dp[i][j][0][0] += dp[i-1][k][0][0];
if(j < tnum){
dp[i][j][0][0] += dp[i-1][k][1][0];
}
dp[i][j][0][0] %= MOD;
}
if(j >= k){
dp[i][j][0][1] += dp[i-1][k][0][1];
if(j < tnum){
dp[i][j][0][1] += dp[i-1][k][1][1];
}
dp[i][j][0][1] %= MOD;
}
if(j > k){
dp[i][j][0][1] += dp[i-1][k][0][0];
if(j < tnum){
dp[i][j][0][1] += dp[i-1][k][1][0];
}
dp[i][j][0][1] %= MOD;
}
if(j == tnum){
if(j <= k){
dp[i][j][1][0] += dp[i-1][k][1][0];
dp[i][j][1][0] %= MOD;
}
if(j >= k){
dp[i][j][1][1] += dp[i-1][k][1][1];
dp[i][j][0][1] %= MOD;
}
if(j > k){
dp[i][j][1][1] += dp[i-1][k][1][0];
dp[i][j][0][1] %= MOD;
}
}
}
}
}
long ans = 0;
for(int i = 0; i < 10; i++){
ans += dp[len][i][0][0];
ans += dp[len][i][0][1];
ans += dp[len][i][1][0];
ans += dp[len][i][1][1];
ans %= MOD;
}
System.out.println(ans);
}
}
}
2017"百度之星"程序设计大赛 - 复赛1005&&HDU 6148 Valley Numer【数位dp】的更多相关文章
- 2017"百度之星"程序设计大赛 - 复赛1003&&HDU 6146 Pokémon GO【数学,递推,dp】
Pokémon GO Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 2017"百度之星"程序设计大赛 - 复赛1001&&HDU 6144 Arithmetic of Bomb【java大模拟】
Arithmetic of Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 2017"百度之星"程序设计大赛 - 复赛 01,03,05
Arithmetic of Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- [SinGuLaRiTy] 2017 百度之星程序设计大赛 复赛
[SinGuLaRiTy-1038] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. Arithmetic of Bomb Problem D ...
- 2017百度之星程序设计大赛 - 复赛 Arithmetic of Bomb
http://acm.hdu.edu.cn/showproblem.php?pid=6144 解法:一个简单的模拟 #include <bits/stdc++.h> using names ...
- 2017"百度之星"程序设计大赛 - 复赛
Arithmetic of Bomb Accepts: 1050 Submissions: 1762 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- 【2017百度之星程序设计大赛 - 复赛】Valley Numer
[链接]http://acm.hdu.edu.cn/showproblem.php?pid=6148 [题意] 在这里写题意 [题解] 先把1..N里面的山峰数字个数算出来->x 然后用N减去这 ...
- 【2017"百度之星"程序设计大赛 - 复赛】Arithmetic of Bomb
[链接]http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=777&pid=1001 [题意] 在这里写 [题解] ...
- 2017"百度之星"程序设计大赛 - 资格赛-度度熊与邪恶大魔王(dp+后缀最小值)
度度熊与邪恶大魔王 思路:由于防御和血量的范围很小,所以暴力枚举出对于每种防御造成的每种伤害所需的最小花费,最后只需在伤害大于等于血量的情况下再找到最小花费(这个只需要后缀最小值预处理一下就可以了) ...
随机推荐
- android 串口开发第二篇:利用jni实现android和串口通信
一:串口通信简介 由于串口开发涉及到jni,所以开发环境需要支持ndk开发,如果未配置ndk配置的朋友,或者对jni不熟悉的朋友,请查看上一篇文章,android 串口开发第一篇:搭建ndk开发环境以 ...
- Oracle数据库部分迁至闪存存储方案
Oracle数据库部分迁至闪存存储方案 1.实施需求 2.确认迁移表空间信息 3.确认redo信息 4.确认undo信息 5.表空间迁移到闪存 6.redo迁移到闪存 7.undo迁移到闪存 8.备库 ...
- 本地如何操作服务器的mysql,详细教程
前置条件: 1.在阿里云服务器de系统是win service 2012. 2.服务器里自己安装了my sql 5.7 3.本地也安装了my sql 5.7 需求:想通过本地的mysql连接上远程的服 ...
- Dubbo(一) 开始认识Dubbo,分布式服务框架
引言: 以前的车马很慢,一生只够爱一个人以前的网站人很少,一个单应用服务着一个人--------------------现在,动不动就谈什么高并发,千万级访问.单应用?BOOM!分分钟爆炸.于是,技术 ...
- Golang fmt包使用小技巧
h1 { margin-top: 0.6cm; margin-bottom: 0.58cm; direction: ltr; color: #000000; line-height: 200%; te ...
- py2 to py3 return iterator
Views And Iterators Instead Of Lists Some well-known APIs no longer return lists: dict methods dict. ...
- C++ qsort
使用qsort 需要包含头文件#include<algorithm> 例子: class Wooden{ public: int weight; int length; bool flag ...
- copy&deepcopy
import copy 字典参照列表结论,看是否有深层嵌套. a = {'name':1,'age':2} b = a a['name'] = 'ff' print(a) print(b) print ...
- rpy2安装使用中的问题
rpy2是python中的R语言接口模块,今天捣鼓了一个下午,终于把rpy2搞定,记录一下安装过程中需要注意的问题: 1. R编译的过程中,必须选择--enable-R-shlib 选项,将R编译成l ...
- windows64 系统下安装Nodejs
1.nodejs安装: 版本号: node-v8.9.3-x64 检测安装成功:(这个版本已经集成了npm) 2.npm作为一个NodeJS的模块管理,先配置npm的全局模块的存放路径以及cache的 ...