URAL1009 K-based Numbers
2015-06-18 12:26
351 查看
题意比较简单吧,,,,,,,前导0不算,,中间有连续的0算不合适,,,,问n位K个有效位的数有多少个?
这题一看要么找规律,要么递推。。。。而且注意到<18所以用 long long
样例就是2位有效数字嘛,,,就是9*10=90啦。。。。(个位0~9,十位1~9)
(这题坑了我半天因为K表示的是位数也是进制!!!!开始全用10进制了、。。。。)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include<bits/stdc++.h>
long long dp[20][20];
int main()
{
int n,k;
for(int i=2; i<=18; i++)
{
dp[i][1] = i-1;
dp[i][2] = (i-1)*i;
}
for(int i=2; i<=10; i++)
for(int j=3; j<=18; j++)
dp[i][j] = (i-1)*(dp[i][j-1] + dp[i][j-2]);
while(scanf("%d%d",&n,&k)!=EOF)
{
printf("%lld\n",dp[k]
);
}
return 0;
}
代码很简单了,,,,,,DP嘛,,,,直接用一两行就找到规律了。。。。。
这题一看要么找规律,要么递推。。。。而且注意到<18所以用 long long
样例就是2位有效数字嘛,,,就是9*10=90啦。。。。(个位0~9,十位1~9)
(这题坑了我半天因为K表示的是位数也是进制!!!!开始全用10进制了、。。。。)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include<bits/stdc++.h>
long long dp[20][20];
int main()
{
int n,k;
for(int i=2; i<=18; i++)
{
dp[i][1] = i-1;
dp[i][2] = (i-1)*i;
}
for(int i=2; i<=10; i++)
for(int j=3; j<=18; j++)
dp[i][j] = (i-1)*(dp[i][j-1] + dp[i][j-2]);
while(scanf("%d%d",&n,&k)!=EOF)
{
printf("%lld\n",dp[k]
);
}
return 0;
}
代码很简单了,,,,,,DP嘛,,,,直接用一两行就找到规律了。。。。。
相关文章推荐
- 跟我学Java安全编程系列
- phpMyAdmin最常见的两个错误解决
- Genymotion安卓模拟器系统字体小如何解决
- 浅析手机充电时不断重启
- 转的:运维新手们,别再问需不需要学PYTHON了
- JAVA语言的特点
- 使用ClippingNode对精灵进行遮罩处理
- 拨打美国国际长途
- 阿里云mysql数据库忘记密码处理方法以及用navicat远程登录mysql
- 线程中start方法与run方法的区别-java教程
- 判断navigation中父控制器类型
- 阿里笔试题--最大流
- 快速排序
- [置顶] WinForm大型企业ERP系统
- 面向对象技术学习笔记1:类及类间关系
- awk 统计网络连接数
- Python OS模块总结
- 分享一个双目测距的项目
- 日语学习之沪江N3基础 20150618 -3
- UIViewController、UINavigationController与UITabBarController的整合使用