HDU 1422 循环的序列,可以利用输入数据两次解决
2012-09-02 20:17
253 查看
这题的状态不难理解,状态表示为,如果上一个城市剩下的钱不为负,也就是没有被赶回杭电,则再考虑它对下一个城市的影响;如果上一个城市剩下的前加上当前城市的前大于当前城市的生活费,那么Dp[i]=Dp[i-1]+1;
值得注意的而是这题的数据为100000;不可能以每个城市为起点来一次Dp,时间复杂度为n^2;足已超时;
我是这样处理的,在保存的数据后面再接上1…n的数据,这样扫描一遍的复杂度为n;再加一个优化,当Dp[i]==n时,也就是能全部游完所有城市的时候,直接break;
值得注意的而是这题的数据为100000;不可能以每个城市为起点来一次Dp,时间复杂度为n^2;足已超时;
我是这样处理的,在保存的数据后面再接上1…n的数据,这样扫描一遍的复杂度为n;再加一个优化,当Dp[i]==n时,也就是能全部游完所有城市的时候,直接break;
#include <iostream> #include <string> #include <cmath> using namespace std; const int MAXN = 100005; int a[MAXN * 2]; int main() { int n; int i; int w, l; while (scanf("%d", &n) != EOF) { for (i = 0; i < n; i++) { scanf("%d%d", &w, &l); a[i] = w - l; a[i + n] = w - l; } int sum = 0; int ans = 0; int cnt = 0; for (i = 0; i < 2 * n;i++) { sum += a[i]; if (sum < 0) { ans = ans > cnt ? ans : cnt; sum = 0; cnt = 0; } else cnt++; if(cnt >= n) break; } ans = ans > cnt ? ans : cnt; if (ans > n) ans = n; printf("%d\n", ans); } return 0; }
相关文章推荐
- 解决C语言从键盘输入不合法数据所导致的死循环
- hdu 2153 仙人球的残影新解法(可以利用蛇阵来解决哦!)
- 解决给定义的整型数据输入字符时出现死循环的问题
- 解决cin因为输入错误的数据类型进入死循环的问题
- 编写一段程序,从标准输入读取string对象的序列直到连续出现两个相同的单词或者所有单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次是使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有人任何单词是重复出现的。
- iterator 遍历数据循环输入 input中的解决办法。
- 索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到解决。
- thinkphp使用view的时候无法利用phpexcel导出数据问题的解决
- 【jQuery】解决在循环中使用ajax异步时,数据的同步问题
- 循环buffer解决网络通信中数据的不完整接收
- 利用FFmpeg对火眼一体摄像机的回调数据进行处理:YUV转H264,H264封装flv,所有输入都是在内存中。
- SourceTree保存密码--解决每次pull、push都要输入两次密码的问题
- Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。 Input 输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数
- 用csv导出文件时,每个cell加上双引号后,可以原样输入cell中的内容,不管是否cell中是否包含逗号或者换行,但是如果包含双引号,则换行失效,解决方法如下
- 加载大量的xml数据 使用压缩方法解决(当然较小时也可以压缩)
- 一个正整数有可能可以被表示为 m(m>=2) 个连续正整数之和,编写一个程序,输入一个正整数,然后找出符合这种要求的所有 连续正整数序列,若不存在这种序列,则打印None。
- ORACLE当遇到“数据大小超出此类型的最大值”和“仅可以为插入 LONG 列的 LONG 值赋值”异常时的解决方法
- 如何解决PHP里大量数据循环时内存耗尽的问题
- 利用Javascript解决HTML大数据列表引起的网页加载慢/卡死问题。
- 通过利用引用型数据和基本型数据的区别可以判断出数据的类型是否是引用型的String为例