zoj 3164 各种背包
来源:互联网 发布:ios编程用什么语言 编辑:程序博客网 时间:2024/04/29 20:04
好久没有写博客了,因为最近刷的是水题,感觉没有什么写的必要,更重要的是都没有怎么好好a过一道题了,这道题也一点都不难,只是让我从tle到wa再到ac经历了漫长的时间啊。。。。就因为题意理解不好,最后结果如果不存在或者价值为负的时候都应该输入sorry的,而我没有好好理解题意啊!
下面是代码:
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#include<stack>#include<vector>#include<climits>#include<map>using namespace std;#define rep(i,n) for(int i=0; i<n; i++)#define repf(i,n,m) for(int i=(n); i<=(m); ++i)#define repd(i,n,m) for(int i=(n); i>=(m); --i)#define max(a,b) (a)>(b)?(a):(b)#define min(a,b) (a)<(b)?(a):(b)#define fab(a) ((a)>0?(a):(0-(a)))#define ll long long#define arc(a) ((a)*(a))#define inf 10000000#define exp 0.000001#define N 1500int dp[N];int w[N],b[N];struct node{int k,v,p;}a[N];int n,d;char s[N];bool vis[N];void fun1(int p,int v){repf(i,p,d)if(dp[i-p]!=-inf)dp[i]=max(dp[i],dp[i-p]+v);}void fun2(int p,int v){repd(i,d,p)if(dp[i-p]!=-inf)dp[i]=max(dp[i],dp[i-p]+v);}void fun3(int p,int v){repf(i,p,d)if(b[i-p]!=-inf)b[i]=max(b[i],b[i-p]+v);}void fun4(int p,int v){repd(i,d,p)if(b[i-p]!=-inf)b[i]=max(b[i],b[i-p]+v);}int main(){ while(scanf("%d%d",&n,&d)!=EOF){int g;repf(i,1,n)scanf("%d%d%d",&a[i].k,&a[i].v,&a[i].p); scanf("%d",&g);repf(i,1,d) dp[i]=-inf;dp[0]=0;getchar();memset(vis,false,sizeof(vis));while(g--){ gets(s); repf(i,0,d)w[i]=dp[i];int len=strlen(s);s[len]=' ';int t=0;rep(i,len+1)if(s[i]==' '){ vis[t]=true;repf(i,0,d)b[i]=w[i];int l=1;int cont=a[t].k;if(cont==0 || cont*a[t].p>=d)fun3(a[t].p,a[t].v);else{ while(l<cont) { fun4(l*a[t].p,l*a[t].v); cont-=l; l*=2; } fun4(cont*a[t].p,cont*a[t].v);}repf(i,0,d)dp[i]=max(dp[i],b[i]);t=0;} elset=t*10+s[i]-'0';}repf(i,1,n)if(vis[i]==false){int l=1; int cont=a[i].k;if(cont==0 || cont*a[i].p>=d)fun1(a[i].p,a[i].v);else{while(l<cont){fun2(l*a[i].p,l*a[i].v);cont-=l;l*=2;}fun2(cont*a[i].p,cont*a[i].v);}}if(dp[d]<0)printf("i'm sorry...\n");elseprintf("%d\n",dp[d]);} return 0;}
- zoj 3164 各种背包
- zoj 3164 分组背包 + 各种背包
- ZOJ 0-1背包
- zoj 3623(完全背包)
- zoj 3689 简单背包
- ZOJ 2639 01背包
- ZOJ 2972(背包dp)
- zoj 3956 01背包
- zoj 3623 背包
- zoj 3164 Cookie Choice (分组混合背包)
- Zoj 3164 Cookie Choice(多重背包+分组背包,更新队列优化)
- 各种背包问题简述
- DP_各种背包专辑
- 各种背包问题
- 各种背包基础
- 各种背包问题详解
- 各种背包模板
- ZOJ 3682 简单dp 背包
- Android Studio界面设置
- GettingStarted EclipseSetup (官网资料:hive+eclipse设置)
- C#委托实例
- Varnish
- POJ4449(三维凸包+空间坐标旋转+二维凸包)
- zoj 3164 各种背包
- Google Page Rank算法——初稿
- Android 锁屏机制
- 如何配置iOS推送通知
- 杭电2052
- Comcast 力推 RDK
- linux grep命令
- 确认网络环境 3G/WIFI
- 找出数列中不存在的数据项