嵌套矩形问题(最长路及其字典序)
有n个举行,选出尽量多的矩阵排成一排,使得除了最后一个之外,每一个矩形可以嵌套在下一个矩形内,并且打印

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <stack>
#include <cctype>
#include <string>
#include <queue>
#include <map>
#include <set> using namespace std; const int INF = 0xffffff;
const double esp = 10e-;
const double Pi = * atan(1.0);
const int maxn = + ;
const long long mod = ;
const int dr[] = {,,-,,-,,-,};
const int dc[] = {,,,-,,-,-,};
typedef long long LL; LL gac(LL a,LL b){
return b?gac(b,a%b):a;
}
int n;
bool graph[maxn][maxn];
struct G{
int a,b;
};
G g[maxn];
int d[maxn][maxn];
bool judge(int x,int y){
if(g[x].a < g[y].a && g[x].b < g[y].b)
return ;
if(g[x].a < g[y].b && g[x].b < g[y].a)
return ;
return ;
}
int dp(int i,int tt){
if(d[tt][i] > )
return d[tt][i];
d[tt][i] = ;
for(int j = ;j <= n;j++){
if(graph[i][j]){
d[tt][i] = max(d[tt][i],dp(j,tt)+);
}
}
return d[tt][i];
}
void print_ans(int i,int tt){
printf("%d ",i);
for(int j = ;j <= n;j++){
if(graph[i][j] && d[tt][i] == d[tt][j] + ){
print_ans(j,tt);
break;
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.in","r",stdin);
// freopen("output.txt","w",stdout);
#endif
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i = ;i <= n;i++){
getchar();
char ch;
scanf("%c%d%d",&ch,&g[i].a,&g[i].b);
//int fin = -1;
for(int j = ;j < i;j++){
if(judge(i,j)){
graph[i][j] = ;
}
if(judge(j,i)){
graph[j][i] = ;
}
}
}
int ans = -;
int m;
memset(d,,sizeof(d));
for(int i = ;i <= n;i++){
int tmp = dp(i,i);
if(tmp > ans){
m = i;
ans = tmp;
}
}
printf("%d\n",ans);
print_ans(m,m);
}
return ;
}

硬币问题

有n种硬币,面值分别为v1,v2,v3……给定非负整数s问选用多少个硬币使面值恰好等于s?求出硬币数目最大值和最小值……

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <stack>
#include <cctype>
#include <string>
#include <queue>
#include <map>
#include <set> using namespace std; const int INF = 0xffffff;
const double esp = 10e-;
const double Pi = * atan(1.0);
const int maxn = + ;
const long long mod = ;
const int dr[] = {,,-,,-,,-,};
const int dc[] = {,,,-,,-,-,};
typedef long long LL; LL gac(LL a,LL b){
return b?gac(b,a%b):a;
}
int V[maxn];
int minv[maxn];
int maxv[maxn];
int d[maxn];
int n;
int dp(int i){
if(d[i] != -)
return d[i];
d[i] = -INF;
for(int j = ;j <= n;j++){
if(i >= V[j]){
d[i] = max(d[i],dp(i - V[j])+);
}
}
return d[i];
}
void print_ans(int * a,int s){
for(int i = ;i <= n;i++){
if(s >= V[i] && a[s] == a[s -V[i] ]+){
printf("%d ",V[i]);
print_ans(a,s-V[i]);
break;
}
}
}
void print_Ans(int *a,int s){
while(s){
printf("%d ",a[s]);
s -= a[s];
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.in","r",stdin);
// freopen("output.txt","w",stdout);
#endif
while(~scanf("%d",&n)){
int s;
scanf("%d",&s);
for(int i = ;i <= n;i++){
scanf("%d",&V[i]);
}
d[] = ;
for(int i = ;i <= s;i++)
d[i] = -;
minv[] = maxv[] = ;
for(int i = ;i <= s;i++){
minv[i] = INF;
maxv[i] = -INF;
}
int min_coin[maxn];
int max_coin[maxn];
for(int i = ;i <= s;i++){
for(int j = ;j <= n;j++){
if(i >= V[j]){
if(minv[i] > minv[i - V[j]]+){
minv[i] = min(minv[i],minv[i-V[j] ] + );
min_coin[i] = V[j];
}
if(maxv[i] < maxv[i-V[j] ]+){
maxv[i] = max(maxv[i],maxv[i -V[j] ]+);
max_coin[i] = V[j];
}
minv[i] = min(minv[i],minv[i-V[j] ] + );
maxv[i] = max(maxv[i],maxv[i -V[j] ]+);
}
}
}
print_Ans(min_coin,s);
printf("\n");
print_Ans(max_coin,s);
printf("\n");
printf("%d %d\n",minv[s],maxv[s]);
print_ans(minv,s);
printf("\n");
print_ans(maxv,s);
printf("\n");
int ans = dp(s) ;
if(ans < -){
printf("no problem\n");
}
else{
printf("%d\n",ans);
}
}
return ;
}

DAG上的动态规划的更多相关文章

  1. UVa 103 Stacking Boxes --- DAG上的动态规划

    UVa 103 题目大意:给定n个箱子,每个箱子有m个维度, 一个箱子可以嵌套在另一个箱子中当且仅当该箱子的所有的维度大小全部小于另一个箱子的相应维度, (注意箱子可以旋转,即箱子维度可以互换),求最 ...

  2. DAG上的动态规划之嵌套矩形

    题意描述:有n个矩形,每个矩形可以用两个整数a.b描述,表示它的长和宽, 矩形(a,b)可以嵌套在矩形(c,d)当且仅当a<c且b<d, 要求选出尽量多的矩形排成一排,使得除了最后一个外, ...

  3. UVA 1025 "A Spy in the Metro " (DAG上的动态规划?? or 背包问题??)

    传送门 参考资料: [1]:算法竞赛入门经典:第九章 DAG上的动态规划 题意: Algorithm城市的地铁有 n 个站台,编号为 1~n,共有 M1+M2 辆列车驶过: 其中 M1 辆列车从 1 ...

  4. 第九章(二)DAG上的动态规划

    DAG上的动态规划: 有向无环图上的动态规划是学习DP的基础,很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 1.没有明确固定起点重点的DAG模型: 嵌套矩形问题:有n个矩形,每个矩形可 ...

  5. DAG 上的动态规划(训练指南—大白书)

    有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 一.矩形嵌套 题目描述:       ...

  6. DP入门(2)——DAG上的动态规划

    有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 一.DAG模型 [嵌套矩形问题] 问题 ...

  7. 嵌套矩形——DAG上的动态规划

    有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.非常多问题都能够转化为DAG上的最长路.最短路或路径计数问题. 题目描写叙述: 有n个矩形,每一个矩 ...

  8. DAG上的动态规划---嵌套矩形(模板题)

    一.DAG的介绍 Directed Acyclic Graph,简称DAG,即有向无环图,有向说明有方向,无环表示不能直接或间接的指向自己. 摘录:有向无环图的动态规划是学习动态规划的基础,很多问题都 ...

  9. 9.2 DAG上的动态规划

    在有向无环图上的动态规划是学习动态规划的基础,很多问题都可以转化为DAG上的最长路,最短路或路径计数问题 9.2.1 DAG模型 嵌套矩形问题: 矩形之间的可嵌套关系是一种典型的二元关系,二元关系可以 ...

  10. UVA 437 The Tower of Babylon(DAG上的动态规划)

    题目大意是根据所给的有无限多个的n种立方体,求其所堆砌成的塔最大高度. 方法1,建图求解,可以把问题转化成求DAG上的最长路问题 #include <cstdio> #include &l ...

随机推荐

  1. Windows Phone 8初学者开发—第17部分:Coding4Fun工具包简介

    原文 Windows Phone 8初学者开发—第17部分:Coding4Fun工具包简介 第17部分:Coding4Fun工具包简介 原文地址:  http://channel9.msdn.com/ ...

  2. Flowers(二分水过。。。)

    Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  3. App状态管理-AppDelegate

    前面提到AppDelegate的实例在UIApplicationMain函数中被创建并调用. AppDelegate的主要作用,可以从其继承类可以看出 class AppDelegate:UIResp ...

  4. 设置不输入密码ssh登录

    在/etc/hosts文件下加入: 192.168.1.60 u60 #设置u60为主机名 在每个节点上创建RSA秘钥: # ssh-keygen -t rsa # 一直按确定键即可 # touch ...

  5. 打开sa属性报错

    --如果打开sa属性报错如下:无法显示请求的对话框.属性IsLocked不可用于“登录名sa".该对象可能没有此属性,也可能是访问权限不足而无法检索 --解决办法:首先用windows登录, ...

  6. sparkUI使用与扩展

      http://www.jianshu.com/p/8e4c38d0c44e

  7. Eclipse使用技巧总结(三)

    十六.快速关闭窗口   关闭当前打开窗口 Ctrl + W       关闭当前打开的所有窗口 Ctrl +Shift +F4 十九.重命名  F2 二十.快速回到上次编辑点  Ctrl + Q 二十 ...

  8. EXT.NET高效开发(三)——使用Chrome浏览器的开发人员工具

    这篇帖子老少皆宜,不分男女,不分种族,不分职业.俗话说:“磨刀不误砍柴工”.掌握一些开发工具的使用,对自己帮助是很大的(无论是用于分析问题,还是提高生产力).本篇就讲述如何利用Chrome浏览器(这里 ...

  9. iOS开发之使用Ad Hoc进行测试

    由于最近某个项目需要给别人测试,使用的是Ad Hoc方法 首先登录开发者官网配置证书 1.添加Certificates,从电脑获取certSigningRequest然后添加进去 2.在Identif ...

  10. android页面切换效果

    两种方式: 在activity的自定义主题中定义切换方式: overridePendingTransition()方法 自定义主题: 在项目的res/values/styles.xml中添加样式 &l ...