摘要:
简单模拟#include #include #include using namespace std;int n;char st[300];int main(){ while (scanf("%d", &n), n) { scanf("%s", st); in... 阅读全文
摘要:
递推#include #include char st[50005];int f[50005];bool ok(char a, char b){ if (a == '0') return false; int x = (a - '0') * 10 + b - '0'; ... 阅读全文
摘要:
简单题#include int main(){ int t; scanf("%d", &t); while (t--) { int a, b; scanf("%d%d", &a, &b); if (a >= b) ... 阅读全文
摘要:
简单题#include int main(){ int f[5]; for (int i = 0; i < 3; i++) { scanf("%d", &f[i]); if (f[i] <= 168) { printf... 阅读全文
摘要:
题意:给出一个格子矩阵,格子分为两种——可用和不可用。要求在画一个矩形,矩形所覆盖的格子全都是可用的,并且要求矩形的面积最大。分析:dp。O(n^2)的效率。先说一种低效的方法,依次枚举每个格子, 从该格子向上走直到遇到不可用点为止,将这段路程对应的线段,向左平移直到遇到不可用的格子为止,再向右平移... 阅读全文
摘要:
简单题#include int table_len;int total_miles;int main(){ while (scanf("%d", &table_len), ~table_len) { int speed, now_time, last_time = 0; ... 阅读全文
摘要:
简单题#include #define maxn 20#define maxl 30int n;char st[maxn][maxl];int main(){ int t = 0; while (scanf("%d", &n), n) { t++; pr... 阅读全文
摘要:
最长递增子序列#include #include #include #include using namespace std;#define maxn 40004int n;int f[maxn];int d[maxn];int m;void input(){ scanf("%d", &n);... 阅读全文
摘要:
简单题#include <cstdio>using namespace std;int main(){ int t; scanf("%d", &t); while (t--) { long long n; scanf("%lld", &n); long long temp = 5; long long ans = 0; while (temp <= n) { ans += n / temp; temp *= 5; } ... 阅读全文
摘要:
dp#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;#define MAX_COIN_NUM 505#define MAX_CAP 10005struct Coin{ int price, weight;}coin[MAX_COIN_NUM];int capacity;int coin_num;int f[MAX_CAP]; void input(){ int a, b; scanf("%d%d&quo 阅读全文
摘要:
题意:给出一个数列有n个数,要求用分割分把这个数列分成m段,不能改变原数列的顺序。每段至少一个数。求使得加和最大的那段的加和最小的划分方案。如果有多组解的话先要保证第一段和尽量小,若仍有多组解,要先保证第二段和尽量小,以此类推。分析:二分+贪心。二分查找这个加和最大的段的加和最小值。在查找过程中,每次枚举这个加和,对数列从左到右看一遍,看在每段加和不超过这个枚举值的前提下最少可以将这个数列分成几段。如果分段数小于等于m则这个枚举值偏大或者刚刚好,如果大于m则说明枚举值偏小。找到了这个值之后,我们开始求最优方案,我的做法是先保证最右面那段加和尽量大,其次右数第二段加和尽量大,以此类推。虽然与题中 阅读全文
摘要:
简单题#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int reverse_num(int a){ char st[50]; sprintf(st, "%d", a); reverse(st, st + strlen(st)); int ret; sscanf(st, "%d", &ret); return re 阅读全文
摘要:
最长递增子序列#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>using namespace std;#define maxn 40004int n;int f[maxn];int d[maxn];int m;void input(){ scanf("%d", &n); for (int i = 0; i < n ;i++) scanf("%d", &f[i]);}int binarysea 阅读全文