01 2014 档案

摘要:01背包问题,设f[i]为拿了i件能得到的最大价值。关于限制条件Q只要在每次更新f[i]的值的时候都判断当前值是否是小于Q的最大值即可#include #include #include using namespace std;const int maxn = 31;double f[maxn],val[400];int main() { int N; double Q; while(scanf("%lf%d",&Q,&N),N) { memset(f,0,sizeof(f)); double ans = 0; for(int i = 0;i 'C& 阅读全文
posted @ 2014-01-23 15:26 acm_roll 阅读(155) 评论(0) 推荐(0)
摘要:题意大概是一个小哥要去抢银行,他列出了几个银行的价值和被抓概率,然后定了一个最高被抓概率,求最多可以抢多少价值的东西。一开始想成是被抓概率简单叠加了,写了个简单的背包就直接提交,WA..o(╯□╰)o不过确实是背包问题,不过求的值是逃跑概率,然后只要在能逃跑的范围内找最大价值就好了。#include #include #include using namespace std;double f[10001],p[150],P;int m[150];int main() { int T,n; scanf("%d",&T); while(T--) { int sum = 阅读全文
posted @ 2014-01-23 13:57 acm_roll 阅读(195) 评论(0) 推荐(0)
摘要:一个典型的有依赖的背包问题。这里每种物品最多只可能有三个附属品,我看错了题目条件,写了一个可能有n个附属品的版本。o(╯□╰)o可以将物品按照附属关系先进行分组,对每组都来一次01背包。#include #include #include using namespace std;const int maxn = 100;const int maxv = 3201;struct Item { int cost,w,child,cnum[maxn],fa;};Item itm[maxn];int f[maxv],g[maxv];int main() { int n,limv; scanf(&quo 阅读全文
posted @ 2014-01-23 10:15 acm_roll 阅读(291) 评论(0) 推荐(0)
摘要:最简单的RMQ问题,这次改用ST算法来写,存下来当模板吧。ST算法通过nlogn的时间(也可以是O(n))预处理出d[i][j](起始位置为i长度为2^(j-1))区间的内的最值,递推式:d[i][j] = min(d[i][j-1],d[I+2^(j-1][j-1])查询的时候先找到一个k有2^(k+1)>(R-L+1)然后可得minv(L,R)=min(d[L][K],d[R-(1#include #include #include using namespace std;const int maxn = 50001;int minv[maxn][20],maxv[maxn][20] 阅读全文
posted @ 2014-01-22 17:02 acm_roll 阅读(236) 评论(0) 推荐(0)
摘要:大体思路就是枚举裁判位置,找逆序对数。练习一下用树状数组来寻找逆序对#include #include #include #define lowbit(x) ((x)&(-x))using namespace std;const int maxi = 100005;const int maxn = 20001;int C[maxi],num[maxn],n;int l[maxn],r[maxn];inline void add(int x,int d) { while(x 0) { ans += C[x]; x -= lowbit(x); } return ans;}int main( 阅读全文
posted @ 2014-01-21 15:28 acm_roll 阅读(333) 评论(0) 推荐(0)
摘要:最裸的高精度幂,记录一下Java里面高精度类的用法而已 1 import java.io.*; 2 import java.util.Scanner; 3 import java.math.*; 4 5 public class Main 6 { 7 public static void main(String[] args) 8 { 9 Scanner cin = new Scanner(System.in);10 while(cin.hasNext()) {11 int m;12 String... 阅读全文
posted @ 2014-01-13 16:31 acm_roll 阅读(161) 评论(0) 推荐(0)
摘要:这题剧情就是粑粑出发去找他那淘气的儿子。建模比较麻烦,把每个点的坐标扩大两倍然后把墙坐标点和房间都转化成相应的点来处理,然后存到二维数组中bfs。要注意的是儿子的初始坐标可能不在题目描述中的0,199的范围内,或者根本没有任何墙,出现这些情况的时候直接输出0就好了,不然吃RE,我就是狂吃了近10个RE去看discuss才发现的。。真是囧#include #include #include #include #define wall -1#define door 1using namespace std;const int maxn = 205;int maze[maxn * 2][maxn * 阅读全文
posted @ 2014-01-13 16:27 acm_roll 阅读(253) 评论(0) 推荐(0)
摘要:给定m,n求gcd(fib(m),fib(n))利用具体数学里面的一个公式,可以转化成求fib(gcd(m,n)),不过题目给的范围到了10^9,因此这里要采用矩阵连乘法来求斐波那契数。第一次写矩阵快速幂,写的比较挫#include #include #define mm 10003 using namespace std; struct mat { int data[2][2]; mat() { memset(data,0,sizeof(data)); }; mat(int a,int b,int c,int d) { data[0][0... 阅读全文
posted @ 2014-01-01 12:27 acm_roll 阅读(224) 评论(0) 推荐(0)