摘要: 思路:将v1,v2,k都当作一种体积,每种物品只能取一次,求max.......反思:以前写背包,由于只有一个体积,所以习惯性的在for中,就所取的最小值限制,而在这次,因为这里导致wa了,具体是因为在多个体积限制的背包里,当这个体积小于它的最小体积时,它可以不去减它的最小体积,而是作为一种状态来传递其他体积的限制的值........wa代码:#include#include#includeusing namespace std;int dp[105][105][110],s[105][3];int max(int x,int y){ if(x>y) return x; el... 阅读全文
posted @ 2013-07-26 15:10 紫忆 阅读(845) 评论(0) 推荐(0) 编辑
摘要: 题意:有k种石头,高为hi,在不超过ai的高度下,这种石头可以放置,有ci种这个石头,求这些石头所能放置的最高高度.........思路:以往的什么硬币种数,最大硬币数之类的,他们的硬币都已经是排好序了的,总是从小到大,但是这个题目不同,它有着最高高度的限制,那么在思考的时候,要得到最优的,那么首先就是要对ai排序......这是贪心,然后就是多重背包了........#include#include#include#includeusing namespace std;struct node{ int h; int a; int c;}s[500];int dp[50000... 阅读全文
posted @ 2013-07-26 12:44 紫忆 阅读(664) 评论(0) 推荐(0) 编辑
摘要: 题意:有现今cash,和n种钱币,每种钱币有ni个,价值为di,求各种钱币组成的不超过cash的最大钱数.......思路:二进制拆分转化为01背包,或者转化为完全背包都是可以的。反思:这个题目我wa两次,是应为我把判断cash==0||n==0放得太前,以致于后面的数据木有输入wa代码:#include#include#includeusing namespace std;int dp[110000],t[30000],s[2000][2];int main(){ int cash,n; while(scanf("%d%d",&cash,&n)>0) 阅读全文
posted @ 2013-07-26 12:19 紫忆 阅读(2073) 评论(0) 推荐(0) 编辑
摘要: 水题........#include#include#includeusing namespace std;int s[2000][2],dp[150],t[150][3];int main(){ int text; scanf("%d",&text); while(text--) { int n,m; scanf("%d %d",&n,&m); for(int i=1;i0) { s[cnt][0]=k*t[i][0]; s[cnt++][1]=... 阅读全文
posted @ 2013-07-26 12:11 紫忆 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 题意:价值为1,2,3,4,5,6. 分别有n[1],n[2],n[3],n[4],n[5],n[6]个。求能否找到满足价值刚好是所有的一半的方案。思路:简单的多重背包,我建议多重背包都用二进制拆分优化下........#include#include#includeusing namespace std;int dp[200000],w[200000];int main(){ int t[7],text=0; while(1) { int sum=0; for(int i=1;i0) { w[c... 阅读全文
posted @ 2013-07-26 12:09 紫忆 阅读(494) 评论(0) 推荐(0) 编辑
摘要: 题目很水,不多说.........#includeint main(){ long t,n,m,a,i,j,dp[10005],vol[505],jizhi[505],sum,w; scanf("%ld",&t); while(t--) { w=0; scanf("%ld%ld",&n,&m); sum=m-n; scanf("%ld",&a); for(i=0;idp[j-vol[i]]+jizhi[i]) dp[j]=dp[j-vol[i]]+jizh... 阅读全文
posted @ 2013-07-26 12:03 紫忆 阅读(261) 评论(0) 推荐(0) 编辑