UVA - 103 Stacking Boxes
来源:互联网 发布:sql删除数据库表数据 编辑:程序博客网 时间:2024/05/15 09:09
基础题,dag上的动态规划
盒子的各个长度可以随意排列
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAX 40
using namespace std;
int k,n,box[MAX][15],dp[MAX],map[MAX][MAX],flag;
int d(int index)
{
int i,j;
if(dp[index]>0)
return dp[index];
for(i=0;i<k;i++)
{
if(map[index][i])
dp[index]=max(dp[index],d(i)+1);
}
if(dp[index]==0)
dp[index]=1;
return dp[index];
}
void print(int index)
{
if(flag!=0)
printf(" ");
flag++;
printf("%d",index+1);
int i;
for(i=0;i<k;i++)
if(map[index][i]&&dp[i]+1==dp[index])
{
print(i);
break;
}
}
int main()
{
int i,j,t,maxx;
while(scanf("%d %d",&k,&n)!=EOF)
{
for(i=0;i<k;i++)
for(j=0;j<n;j++)
scanf("%d",&box[i][j]);
for(i=0;i<k;i++)
sort(box[i],box[i]+n);
memset(map,0,MAX*MAX*4);
memset(dp,0,MAX*4);
maxx=flag=0;
for(i=0;i<k;i++)
{
for(j=0;j<k;j++)
{
for(t=0;t<n;t++)
if(box[j][t]<=box[i][t])
break;
if(t==n)
map[i][j]=1;
}
}
for(i=0;i<k;i++)
{
dp[i]=d(i);
}
for(i=0;i<k;i++)
if(dp[i]>dp[maxx])
maxx=i;
printf("%d\n",dp[maxx]);
print(maxx);
puts("");
}
return 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
- 第八周项目 判断(1)
- [Android]判断网络连接是否可用
- UML类图集中关系的总结
- C基础 - 数据输入与输出(4)
- 使用grep find查找文件内容
- UVA - 103 Stacking Boxes
- Ubuntu Commands
- 排序
- hdu 4952 暴力
- javascript 哈夫曼树构造
- MPI之求和
- Android运行时出现意外stopped问题的解决
- 线程(一)概述
- 关于android开发中涉及到的java知识:面向对象(三)