摘要: 多重背包模板题#include#include#include#includeusing namespace std;int n, dp[105];struct Dami{ int v, w, d;} ri[105];void deal(int x){ int i; if(ri[x].d*ri[x].v>=n) { for(i=ri[x].v;i=ri[x].v*k;i--) dp[i]=max(dp[i-ri[x].v*k]+ri[x].w*k,dp[i]); ri[x].d-=k; ... 阅读全文
posted @ 2013-08-19 18:55 Ink_syk 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 模拟题,,,,注意 15次操作限定要精准不要多一次也不要少一次。 找循环的时候从最近的找代码比较挫。。#include #include #include #include #include using namespace std; char s[88], ts[105], nt[105], cpy[17][105]; int vis[10], a[105]; int len, l1; void deal() { int i, j; for(i=0; i=0; j--) nt[l1++]=a[j]+'0'; nt[l1++... 阅读全文
posted @ 2013-08-18 16:34 Ink_syk 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 个人使用了离散+二分。。#include #include #include #include using namespace std; int a[4005], b[4005], c[4005], d[4005], sum1[16000005], sum2[16000005], bin[16000005], num[16000005], top; int find(int x,int l,int r) { int m; while(l>1; if(bin[m]==x) return m; if(bin[m]<x) ... 阅读全文
posted @ 2013-08-17 23:57 Ink_syk 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 简单大数加法,,,题意略蛋疼, 意思是说N行里每行两个数分别代表a的N-I位和b的N-i位的数字,将a和b相加 求值 只需要输出N位 就算最后进位到N+1位也不用输出#include #include #include using namespace std; char n1[1000005], n2[1000005], ans[1000005]; int main() { int n, i, j; char a, b; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { ... 阅读全文
posted @ 2013-08-17 11:50 Ink_syk 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 好像是智力题的样子。。参考:http://www.cnblogs.com/drizzlecrj/archive/2007/10/20/931011.html以下是构造N个人(N >= 1)过桥最佳方案的方法:1)如果N=1或者N=2,所有人直接过桥。2)如果N=3,由最快的人往返一次把其他两人送过河。3)如果N>=4,设A,B为走的最快的和次快的旅行者,过桥所需时间分别为a,b;而Z,Y为走得最慢的和次慢的旅行者,过桥所需时间分别为z,y。那么当2b>a+y时,使用模式一将Z和Y移动过桥当2b #include #include #include #include #incl 阅读全文
posted @ 2013-08-16 20:53 Ink_syk 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 二维树状数组,注意树状数组下标不能从0开始, 且注意数据中 x1, y1 对于x2, y2不一定是左上角和右上角#include #include #include #include #include #include using namespace std; int bk[1005][1005]; int n=1004; int lowbit(int x) { return x&(-x); } int query(int x,int y) { int tp, ret=0; while(x>0) { tp=y; while(tp>... 阅读全文
posted @ 2013-08-16 15:52 Ink_syk 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 线段树区间变化, 用2进制保存颜色。。#include #include #include #include #include #include using namespace std; #define LL(x) (x>1; build(LL(p),l,m); build(RR(p),m+1,r); } void PushDown(int p) { if(T[p].col!=-1) { T[LL(p)].va=T[RR(p)].va=T[p].col; T[LL(p)].col=T[RR(p)].col=T[p].col; ... 阅读全文
posted @ 2013-08-16 13:23 Ink_syk 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 这题就是找到对应钥匙然后突破对应的门,反正最终目的是要到达X 这个终点。要求花费最小时间,如果不能到达输出The poor student is trapped!很明显是广搜,把钥匙的四种状态都加入到哈希表来记重,还有对应的坐标所以是六维数组。。#include #include #include #include #include #include using namespace std; int n, m; char map[105][105]; bool vis[105][105][2][2][2][2]; struct node { node(int p,int q,bool ... 阅读全文
posted @ 2013-08-16 09:36 Ink_syk 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 这题真的过的好艰辛啊,自己的方法是不对的,参考了某个大神的博客,然后修改自己的代码才通过。对于各个区间的交叉之类的还不是很会啊,尚需努力。。。。参考:大神博客线段树真的写的好挫啊,,,,,无力吐槽了。。。题意是对 一些气球染色,然后输出最长的且最近的那个染成白色的连续区间#include #include #include #include #include #include #include using namespace std; #define LL(x) x=r) return; T[p].l=l; T[p].r=r; T[p].va=-1; if(l=... 阅读全文
posted @ 2013-08-16 00:01 Ink_syk 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 四舍五入的思想方法,一直处理到只剩下整十,整百,整千。。。。。#include #include #include using namespace std; int main() { int n, a, i, j, ten, tmp; scanf("%d",&n); while(n--) { ten=1; scanf("%d",&a); while(a>10) { tmp=a%10; a/=10; if(tmp>=5) ... 阅读全文
posted @ 2013-08-15 20:39 Ink_syk 阅读(100) 评论(0) 推荐(0) 编辑