摘要: #include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<algorithm>using namespace std;int n;int a[11][100100];int maxt;int d[11][100010];//d[i][j]表示在i地点j时间已经获得的最大值bool in(int x){ return x>=0&&x<=10;}int main(){ while(scanf("%d&qu 阅读全文
posted @ 2012-08-12 21:56 willzhang 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 这题假设所有的价值加起来为sum那么我们假设一个sum/2的背包用这个背包装物品,于是,这就转化成了一个多重背包问题= =我只会用二进制分解算多重背包以下是代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<algorithm>using namespace std;int n;int val[5000];int size;int d[300000];int main(){ int N; while(scanf("%d 阅读全文
posted @ 2012-08-12 15:45 willzhang 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 类似于求最大子序列的和#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<algorithm>using namespace std;int n;struct T{ int a; int b; int h;}block[100];int d[100];bool cmp(T x,T y){ return x.a*x.b>y.a*y.b;}bool check(int x,int y)//y能放到x上{ if(block[y].a 阅读全文
posted @ 2012-08-12 12:28 willzhang 阅读(123) 评论(0) 推荐(0) 编辑