Lead of Wisdom(杭州电子科技大学2020学习总结)
2020-07-27 19:46
225 查看
思路:题意是有k种类型的物品,列举了m种,每种类型只能选一个,利用公式计算DMG的最大值。
需要遍历多种可能,故用dfs算法来优化,注意当某种类型不存在的情况。解析中使用了一个三维数组,方便计算。
#include <cstdio> typedef long long ll; int T,t,n,k,cnt[60],nxt[60]; int sto[60][60][4]; ll biggest; void dfs(int t,int a,int b,int c,int d){ //截止条件 if(t>k){ ll ans = 1LL*a*b*c*d; if(ans>biggest){ biggest = ans; } return; } int num = cnt[t]; if(!num){ dfs(nxt[t],a,b,c,d); return; } //遍历每种可能 for(int i=1;i<=num;i++){ dfs(t+1,a+sto[t][i][0],b+sto[t][i][1],c+sto[t][i][2],d+sto[t][i][3]); } } int main(){ scanf("%d",&T); while(T--){ scanf("%d%d",&n,&k); for(int i=1;i<=k;i++)cnt[i]=0;//初始化,不会对之后的测试数据产生影响 for(int i=0;i<n;i++){ scanf("%d",&t); cnt[t]++; for(int k=0;k<4;k++){ scanf("%d",&sto[t][cnt[t]][k]);//输入 } } t=k+1; for(int i=k;i;i--){ nxt[i]=t; if(cnt[i]) t=i; } biggest = 0; dfs(1,100,100,100,100); printf("%lld\n",biggest); } return 0; }
相关文章推荐
- 2019-2020-1 20175209 《信息安全系统设计基础》第二周学习总结
- 2020软件开发趋势预测(学习总结)
- 2020最新Java学习编程基础知识总结(软帝出品)
- 2020icassp论文解读总结和学习笔记(声纹识别)
- log4j2 入门学习与总结
- 对LDA的学习和总结
- JavaScript学习总结(九)事件详解
- oracle逐步学习总结之权限和角色(基础六)
- 项目管理学习总结(9)——史上最全互联网八大技术岗位详解
- Linux爬坑之路(学习总结)
- 20155230 2016-2017-2《Java程序设计》第二周学习总结
- Java IO流学习总结
- Java常用容器类学习总结
- JavaWeb学习总结(三)——Tomcat服务器学习和使用(二)
- Spring学习总结五——SpringIOC容器五
- Hadoop 学习总结之一:HDFS简介
- java学习总结——第十天
- 敏捷开发系列学习总结(1)——版本管理发布流程
- Python学习与使用总结
- java基础学习总结——网络编程