Timus 1036 Lucky Tickets
来源:互联网 发布:新款java小轮车 编辑:程序博客网 时间:2024/06/05 18:36
import java.io.*;import java.math.BigInteger;import java.util.*; public class Main { public static void main (String [] args) throws Exception { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int s = scan.nextInt(); if(s%2==1){ System.out.println(0); return; } int t = s/2; BigInteger dp[][] = new BigInteger[n+1][t+1]; for(int i=0;i<=n;i++) Arrays.fill(dp[i], BigInteger.ZERO); dp[0][0] = BigInteger.ONE; for(int i=1;i<=n;i++){ for(int j=0;j<=t;j++){ for(int k=0;k<=Math.min(9, j);k++){ dp[i][j] = dp[i][j].add(dp[i-1][j-k]); } } } System.out.println(dp[n][t].multiply(dp[n][t])); }}
题目倒是不难,做过一定量题目的基本一眼能看出这是个类似背包的东西
背包容量是S/2, 货物可取的值是0到9
一个背包的变形在于限制了物品的数量,不是任意件物品了。
DP公式见以上代码,所以思路还是不难想的。
比较坑的是各种陷阱,首先S不能是奇数,其次 1,20这样的测试数据必须返回0
也就是K的循环上限要注意,(第二次WA在这里)
然后就是坑爹的数据范围,我直接上了long, 过了7个case
我在想一般的题目不用到bigInteger吧,不是坑C++的大数字操作吗。。。
不用这么狠吧,搞得非bigInteger才能过去, 何必呢。
可能是由于最后是dp[n][t]的平方,所以Long也越界了。。。。
最后换BigInteger就顺过去了~~~~~
- Timus 1036 Lucky Tickets
- timus 1036. Lucky Tickets URAL 解题报告
- ural 1036 Lucky Tickets
- ural 1036 Lucky Tickets
- ural 1036 Lucky tickets
- Ural 1036 Lucky Tickets
- lucky tickets
- URAL 1036 Lucky Tickets (高精度,数位dp)
- URAL 1036 Lucky Tickets(基础dp)
- URAL 1036 Lucky Tickets 【dp】【高精度】
- Timus 1031. Railway Tickets
- POJ 2346 Lucky tickets
- pku2346 Lucky tickets
- CF64 C. Lucky Tickets
- poj2346--Lucky tickets+DP
- poj 2346 Lucky tickets
- Ural1044-Lucky Tickets. Easy!
- bnu13376 Lucky Tickets
- Qt右击菜单建立
- SQL2008错误
- 关于递归
- poj2112 二分+最大流
- JAVA 游戏开发之——FPS(帧频刷新率)精准控制
- Timus 1036 Lucky Tickets
- hdu2489之最小生成树
- 欧拉计划39题,42题目
- norflash和nandflash的区别
- spring四种依赖注入方式
- 抽象类与接口
- android图片翻转镜像
- 图文例解C++类的多重继承与虚拟继承
- 后知后觉之——UML中的四种关系