UVA 103--- Stacking Boxes
来源:互联网 发布:域名怎么交易 编辑:程序博客网 时间:2024/06/08 09:08
这道题在小白书中的分类是动态规划,把题AC了之后在网上看解题报告后,多数解法也是DAG上的动态规划。但其实一个简单的深度优先就能解决问题了。首先将每数从大到小排序,再将各组按照排序后的第一个数字的大小进行从大到小排序。需要注意的是,记录各组数据的编号也要和数进行同步的排序。
#include <iostream>#include <cstdio>#include <vector>#include <cstring>#include <algorithm>using namespace std;int k,n;int anscnt;int vis[30+5];vector <vector<int> > box;vector <int> order;//记录各组数的序号vector <int> ans;bool cmp(int i,int j){return i>j;}bool vcmp(vector<int> i,vector<int> j){return i[0]>j[0];}bool ocmp(int i,int j){return box[i-1][0]>box[j-1][0];}void dfs(int,int,int);int main(){ //freopen("data.txt","r",stdin); while(cin>>k>>n){ vector <int> t; int x; box.clear(); order.clear(); for(int i=0;i<k;i++){ t.clear(); order.push_back(i+1); for(int j=0;j<n;j++){ cin>>x; t.push_back(x); } sort(t.begin(),t.end(),cmp);//各组数从大到小排序 box.push_back(t); } sort(order.begin(),order.end(),ocmp);//先将编号排序 sort(box.begin(),box.end(),vcmp);//各组按照首数字的大小从大到小排序 ans.clear(); memset(vis,0,sizeof(vis)); anscnt=0; dfs(0,0,-1); cout<<anscnt<<endl; for(int i=anscnt-1;i>=0;i--){ cout<<ans[i]; i==0?cout<<endl:cout<<" "; } } return 0;}void dfs(int deep,int cnt,int prior){ if(deep==k){ if(cnt>anscnt){ ans.clear(); anscnt=cnt; for(int i=0;i<deep;i++) if(vis[i])ans.push_back(order[i]); } return; } if(prior==-1){//之前还未取任何一组数 if(deep<k-1){ dfs(deep+1,cnt,prior); vis[deep]=1; dfs(deep+1,cnt+1,deep); vis[deep]=0; } } else{ int flag=1; for(int i=0;i<n;i++) if(box[deep][i]>=box[prior][i]) flag=0; if(flag==1){//当前这组数能被之前最后取的一组数装下 vis[deep]=1; dfs(deep+1,cnt+1,deep); vis[deep]=0; } dfs(deep+1,cnt,prior); } return ;}
1 0
- UVa 103 Stacking Boxes
- UVA 103 - Stacking Boxes
- uva 103 - Stacking Boxes
- uva 103 Stacking Boxes
- [UVA 103] Stacking Boxes
- uva:103 - Stacking Boxes
- UVa 103 - Stacking Boxes
- UVA - 103 Stacking Boxes
- uva 103 - Stacking Boxes
- UVA 103 Stacking Boxes
- UVa 103 - Stacking Boxes
- Uva - 103 - Stacking Boxes
- uva 103 - Stacking Boxes
- UVa 103 - Stacking Boxes
- UVa 103 - Stacking Boxes
- Uva-103-Stacking Boxes
- UVa:103 Stacking Boxes
- UVA - 103 Stacking Boxes
- 快速回弹滚动
- UVa 11489 Integer Game
- codeforces 158E Phone Talks (dp)
- 分享一个java Map实现的cache manager,定时清除缓存起来的值
- 关于 avd 无法打开 panic:not open:..的问题
- UVA 103--- Stacking Boxes
- 计算机网络基础
- Android学习笔记
- Ubuntu Linux系统环境变量配置文件简介
- iOS中录音和播放实现
- MyEclipse使用教程:Linux Internal Web浏览器的兼容性
- C#基础学习之【7】事件的使用
- 各种浏览器的Hack写法(chrome firefox ie等)
- 用Beamer制作幻灯片(卷一 基本架构篇)