HDU 1864
来源:互联网 发布:第三方网络销售平台 编辑:程序博客网 时间:2024/06/16 18:16
来个DP练练手,这个题就是个01背包没什么难度的,稍微考验码力的就是字符串的处理读取数据的时候了,然后就是超内存了一次,只需要分析判断好内存最大开多少就好了。因为最多是30张发票,每张面额不超过1000,因此是30000,后来在01背包过程时数据被扩大100倍,因此最后是3000050
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n;double q,a[50],dp[3000050],c[50];char s,cc;int vis[35];int main(){ while(scanf("%lf%d",&q,&n)!=EOF) { if(n==0) { break; } memset(vis,0,sizeof(vis)); memset(c,0,sizeof(c)); memset(dp,0,sizeof(dp)); for(int j=1;j<=n;j++) { vis[j]=1; int m; scanf("%d",&m); double sum=0,temp; memset(a,0,sizeof(a)); for(int i=0;i<m;i++) { cc=getchar(); s=getchar(); cc=getchar(); scanf("%lf",&temp); if(s=='A'||s=='B'||s=='C') { a[s-'A']+=temp; sum+=temp; } else { vis[j]=0; } if(a[s-'A']>600) { vis[j]=0; } } if(sum>1000) { vis[j]=0; } else { c[j]=sum; } } for(int j=1;j<=n;j++) { if(vis[j]) { for(double v=q;v>=c[j];v=v-0.01) { int vv=v*100; dp[vv]=max(dp[vv],dp[vv-(int)(c[j]*100)]+c[j]); } } } printf("%.2lf\n",dp[(int)(q*100)]); } return 0;}
0 0
- hdu 1864
- HDU 1864
- hdu 1864
- HDU 1864
- HDU 1864
- hdu 1864
- HDU 1864
- HDU 1864
- HDU-1864
- 排位赛dp总结(HDU 2955,HDU 1864,HDU 1421)
- HDU ACM 1864
- HDU 1864 (DFS)
- HDU 1864 最大报销
- HDU-1864(DP_01)
- HDU 1864 01背包
- HDU-1864 EXCEL排序
- hdu 1864 DP
- HDU 1864 01背包
- java中几种获取项目路径方式
- Andriud Intent實現頁面的跳轉
- 预编译头(.pch)
- leetcode 135.Candy
- Android判断网络是否可用
- HDU 1864
- 页面切换特效
- fopen()函数的使用
- 详细解说Tomcat 设置虚拟路径的几种方法及为什么设置虚拟路径
- hdu5904
- 类与对象,类的构造方法和初始化块,private修饰符,this,继承与父类
- android程序开发——自定义View(一)
- spark性能调优之分配资源
- Apache2.4 通道异常问题处理方法