摘要:
最长递增子序列#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 阅读全文