这道题思维很灵活。也有点套路的意思。

首先规定0,1分别按照原来的顺序接收,只是01换位。这样简化了思维。(否则并不会有更优结果它。,比较好想)
最大值和最小值可以贪心得到。
那么接下来就是给定一个整数P,判断能不能得到它。
贪心法,从左到右判断P的每一位,从K中最左边的0或1取。
这样会发现任意时刻k中已经被接收的位最右边那那位一定没有延迟(想一想,也比较好想)
设d(i,j)表示用了k的前i个0,前k个1后形成的整数数
则下一个接收的bit是0,转移d(i+1,j)
1 则d(i,j+1)
判断下一个接受的能否为1或0
设第i个0发送时间为Zi,对应有Oi,那么Oj+d>=Zi才可以转移到i+1;j+1对应 画图证一下(用到上一个结论;比如i+1的情况,分接受的最后一位是0或1讨论;还要注意1用完了就不能这么判断了)
同时判断0,1有没有用完

这样就把十进制转化成二进制了
for(int i = 0; i < n; i++) {
K[n-i-1] = k % 2; k /= 2;
}

还要注意k,min,max要用ull

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = ; int n, d, K[maxn];
long long f[maxn][maxn];
unsigned long long minv, maxv; //ull !!!
int zcnt = , ocnt = ;
int Z[maxn], O[maxn]; bool can_receive_zero(int i, int j) {
return i+ <= zcnt && (j == ocnt || O[j]+d >= Z[i]);
} bool can_receive_one(int i, int j) {
return j+ <= ocnt && (i == zcnt || Z[i]+d >= O[j]);
} void solve() {
// compute Z and O
ocnt = zcnt = ;
for(int i = ; i < n; i++)
if(K[i] == ) O[ocnt++] = i;
else Z[zcnt++] = i; minv = maxv = ;
int i = , j = ;
while(i < zcnt || j < ocnt) {
if(can_receive_zero(i, j)) //贪心策略0越前越好
{ i++; minv = minv * ; }
else
{ j++; minv = minv * + ; }
}
i = j = ;
while(i < zcnt || j < ocnt) {
if(can_receive_one(i, j)) { j++; maxv = maxv * + ; }
else { i++; maxv = maxv * ; }
} // dp
memset(f, , sizeof(f));
f[][] = ;
for(int i = ; i <= zcnt; i++)
for(int j = ; j <= ocnt; j++) {
if(can_receive_zero(i, j))
f[i+][j] += f[i][j];
if(can_receive_one(i, j))
f[i][j+] += f[i][j];
}
cout << f[zcnt][ocnt] << " " << minv << " " << maxv << "\n";
} int main() {
int kase = ;
unsigned long long k;
while(cin >> n >> d >> k) {
for(int i = ; i < n; i++) {
K[n-i-] = k % ; k /= ;
}
cout << "Case " << ++kase << ": ";
solve();
}
return ;
}

uva1228 Integer Transmission的更多相关文章

  1. UVALive 4031 Integer Transmission(贪心 + DP)

    分析:求出最大值和最小值比较简单,使用贪心法,求最小值的时候我们让所有的0尽可能的向后延迟就可以了,求最大值则相反. 关键在于求出可以组合出的数字个数. 这就是组合数学版的dp了,我们让dp[i][j ...

  2. light oj 1155 - Power Transmission【拆点网络流】

    1155 - Power Transmission   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 ...

  3. ACdream 1229 Data Transmission

    Data Transmission Special JudgeTime Limit: 12000/6000MS (Java/Others)Memory Limit: 128000/64000KB (J ...

  4. lightoj--1155-- Power Transmission (最大流拆点)

    Power Transmission Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Sub ...

  5. LeetCode 7. Reverse Integer

    Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Have you ...

  6. Integer.parseInt 引发的血案

    Integer.parseInt 处理一个空字符串, 结果出错了, 程序没有注意到,搞了很久, 引发了血案啊!! 最后,终于 观察到了, 最后的部分: Caused by: java.lang.NoC ...

  7. MTU(Maximum transmission unit) 最大传输单元

    最大传输单元(Maximum transmission unit),以太网MTU为1500. 不同网络MTU如下: 如果最大报文数据大小(MSS)超过MTU,则会引起分片操作.   路径MTU: 网路 ...

  8. 由一个多线程共享Integer类变量问题引起的。。。

    最近看到一个多线程面试题,有三个线程分别打印A.B.C,请用多线程编程实现,在屏幕上循环打印10次ABCABC- 看到这个题目,首先想到的是解决方法是定义一个Integer类对象,初始化为0,由3个线 ...

  9. [LeetCode] Integer Replacement 整数替换

    Given a positive integer n and you can do operations as follow: If n is even, replace n with n/2. If ...

随机推荐

  1. 微信小程序一键生成源码 在线制作定制功能强大的微信小程序

    微信小程序发展到现在,短短的一年不到的时间(很快就要迎来微信小程序周年庆),在快迎来周年庆之际,百牛信息技术bainiu.ltd特记录一下这个发展的历程,用于将来见证小程序发展的辉煌时刻,我们还能知道 ...

  2. 【Cocos2d-HTML5 开发之一】新建HTML5项目及简单阐述与cocos2d/x引擎关系

    真的是有一段时间没写博了,这段时间呢,发生的事情真的挺多,另外自己呢也闲来做了一些自己的喜欢的东西,主要做的还是基于Mac系统的Cocoa框架的各种编辑器吧.(对了,今年初也出了自己第二本书<i ...

  3. Android应用开发完全退出程序的通用方法

    在开发一个android应用时,有可能有N个Activity,而在每个Activity里的菜单里有个"退出程序"菜单,这里就要完全退出程序了,所以今天给大家分享的是Android应 ...

  4. C# 利用Aspose.Cells .dll将本地excel文档转化成pdf(完美破解版 无水印 无中文乱码)

    Aspose.Cells .dll下载  http://pan.baidu.com/s/1slRENLF并引用 C#代码 using System; using System.Collections. ...

  5. 时间戳 js 转换

    // 获取当前时间戳(以s为单位) var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; //当前时间戳为:140 ...

  6. JAVA基础-面向对象05

    一.面向对象的引入 解决问题的时候,首先要会分析思路,这个思路就是我们生活中解决一个问题的方法步骤: 有了思路之后,再把思路使用java代码来解决: 但是 计算总分的需求变了 分析:原来在一个程序中, ...

  7. CoreBluetooth Central模式 Swift版

    也是醉了,CB这个API到现在也没有Swift的文档.最新的文档还是3年前还是4年前的OC版的,被雷的外焦里嫩的.自己一点一点写成Swift还各种报错,最坑的是这些错误压根找不到解决方案.索性自己做个 ...

  8. SCUT - 261 - 对称与反对称 - 构造 - 简单数论

    https://scut.online/p/261 由于M不是质数,要用扩展欧几里得求逆元,而不是费马小定理! 由于M不是质数,要用扩展欧几里得求逆元,而不是费马小定理! 由于M不是质数,要用扩展欧几 ...

  9. 2016 Multi-University Training Contest 3 1011【鸽巢原理】

    题解: 坐标(0,m)的话,闭区间,可能一共有多少曼哈顿距离? 2m 但是给一个n,可能存在n(n+1)/2个曼哈顿距离 所以可以用抽屉原理了 当n比抽屉的数量大,直接输出yes 不用计算 那...N ...

  10. iOS 监测电话呼入

    1.首先引入CoreTelephony框架,代码里: @import CoreTelephony; 项目设置里: 2.定义属性,建立强引用: @property (nonatomic, strong) ...