http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=442

求解

x1 + x2 + x3 + .... + xn = m

其中xi属于[L, R]

不同解的个数。

这题需要用大数,要注意。

原理和以前做的一样。容斥。先算出每个xi大于等于Li的解的个数。关于这个,怎么解,看看:

http://www.cnblogs.com/liuweimingcprogram/p/6091396.html

然后容斥吧,枚举有一个数破坏条件,就是大于R的,减掉,两个,加回来。

由于每个R都不同,所以只能暴力dfs。也就是2^n的复杂度。

所以复杂度需要2^n * 常数。

推荐几个题吧。

http://www.cnblogs.com/liuweimingcprogram/p/6134521.html

http://www.cnblogs.com/liuweimingcprogram/p/6135008.html

一样的容斥思路的。

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/ /**
*
* @author Liu
*/
import java.util.*;
import java.math.*; //大数头文件
public class Main {
static final int maxn = 15;
static int[] be = new int[maxn];
static int[] en = new int[maxn];
static int n, m;
static BigInteger ans;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int t = input.nextInt();
while ((t--) > 0) { //返回值必须bool
n = input.nextInt();
m = input.nextInt();
int sum = 0;
for (int i = 1; i <= n; ++i) {
be[i] = input.nextInt();
en[i] = input.nextInt();
sum += be[i];
}
ans = BigInteger.ZERO; //清0
dfs(1, sum, 0);
System.out.println(ans);
}
}
public static BigInteger C(int n, int m) { //这个数字很大
if (n < m) return BigInteger.ZERO;
if (n == m) return BigInteger.ONE;
BigInteger ans = BigInteger.ONE;
int mx = Math.max(n - m, m); //调用最大值
int mi = n - mx;
for (int i = 1; i <= mi; ++i) {
ans = ans.multiply(BigInteger.valueOf(mx + i)); //转换成大数的方法
ans = ans.divide(BigInteger.valueOf(i)); //记得接收返回值
}
return ans;
}
public static void dfs(int cur, int tot, int has) {
if (cur == n + 1) {
if (has % 2 == 1) {
ans = ans.subtract(C(m - tot + n - 1, n - 1));
} else ans = ans.add(C(m - tot + n - 1, n - 1));
return;
}
dfs(cur + 1, tot - be[cur] + en[cur] + 1, has + 1);
dfs(cur + 1, tot, has);
}
}

ZOJ 1442 Dinner Is Ready 容斥原理 + java大数的更多相关文章

  1. java大数

    java大数还是很好用的! 基本加入: import java.math.BigInteger; import jave.math.BigDecimal; 分别是大数和大浮点数. 首先读入可以用: S ...

  2. JAVA大数运算

    java大数是个好东西,用起来方便,代码短. 代码如下: import java.util.*; import java.math.*; public class Main { public stat ...

  3. java大数总结【转】

    java大数(2013长春网络赛)--hdu4762总结一下:1.java提交类要写Main.2.读取大数. Scanner read=new Scanner(System.in); BigInteg ...

  4. HDU5047Sawtooth(java大数)

    HDU5047Sawtooth(java大数) 题目链接 题目大意:在一个矩形内画n个"M".问如何画可以把这个矩形分成最多的区域. 给出这个区域的数目. 解题思路:最好的方式就是 ...

  5. JAVA大数类

    JAVA大数类api http://man.ddvip.com/program/java_api_zh/java/math/BigInteger.html#method_summary 不仅仅只能查J ...

  6. HDU4762(JAVA大数)

    Cut the Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  7. ZOJ3477&JAVA大数类

    转:http://blog.csdn.net/sunkun2013/article/details/11822927 import java.util.*; import java.math.BigI ...

  8. 多校第五场 归并排序+暴力矩阵乘+模拟+java大数&amp;记忆化递归

    HDU 4911 Inversion 考点:归并排序 思路:这题呀比赛的时候忘了知道能够用归并排序算出逆序数,可是忘了归并排序的实质了.然后不会做-- 由于看到题上说是相邻的两个数才干交换的时候.感觉 ...

  9. 收藏的一段关于java大数运算的代码

    收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...

随机推荐

  1. Stanford CS1 Compilers PA2J notes

    [题记·碎碎念] 斯坦福这门Compilers原本放在Coursera上,当年错过档期很是可惜,后来发现他们自己的MOOC站放了一个self paced版本,真是普大喜奔,趁着放假有空学学. 这门课的 ...

  2. selenium2.0(WebDriver) API

    1.1  下载selenium2.0的包 官方download包地址:http://code.google.com/p/selenium/downloads/list 官方User Guide:  h ...

  3. Shogun网站上的关于主流机器学习工具包的比较

    Shogun网站上的关于主流机器学习工具包的比较: http://www.shogun-toolbox.org/page/features/   created last updated main l ...

  4. PullToRefreshListView加载更多定位的解决方法

    之前项目里,早起用到了PullToRefreshListView,后来一部分用到了RefreshListView,最近在做优化的时候,其中一个问题就是PullToRefreshlistView上拉加载 ...

  5. 如何为datagridview加上序号

    最简单的方法是在Datagridview的事件RowPostPaint事件下面添加如下代码即可 private void dataGridView1_RowPostPaint(object sende ...

  6. 使用struts通配符报错

    报错截图如下: 主要原因是:对大小写敏感. struts.xml StudentAction.java jsp页面:(重点就是这里,锚里面需要特别注意,大小写应该与struts.xml里面的保持一致, ...

  7. 更换win7锁屏壁纸

    1.打开注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Backgroun ...

  8. JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍

    这里是javascript中制作滚动代码的常用属性 页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见 ...

  9. Android Activity 四种启动模式

    task和back stack(任务和回退栈) 任务启动,task被加入到回退栈的栈顶,返回的时候回退栈的栈顶任务会被弹出,并被销毁,栈中的前一任务恢复运行,当activity销毁是,系统不会保留ac ...

  10. Objective - C 值对象 NSNumber和NSValue

    在进行数据处理的时候,因为对象类型的不同, 并不能进行相应的数据处理,所以必须要进行数据类型的转换,这也就是NSNumber,NSValue这两类值对象出现的原因. 简而言之,NSNumber就是实现 ...