摘要:
题意:有现今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) 阅读全文
摘要:
水题........#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]=... 阅读全文
摘要:
题意:价值为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... 阅读全文
摘要:
题目很水,不多说.........#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... 阅读全文