嵌套矩形问题(最长路及其字典序)
有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. POJ 1142 质因数分解

    只要很朴素的分解就可以了,数据量不大 #include <stdio.h> #include <string.h> #include <stdlib.h> #inc ...

  2. MVC 扩展 Html.ImageFor

    Asp.Net MVC 扩展 Html.ImageFor 方法详解 背景: 在Asp.net MVC中定义模型的时候,DataType有DataType.ImageUrl这个类型,但htmlhelpe ...

  3. Linux下安装jekyll

    折腾了大半天,终于搞定了,这可得记下来了. 我的Linux版本:CentOS 6.5 主要的安装顺序还是官网上的说明:http://jekyllrb.com/docs/installation/,所以 ...

  4. wifi密码破解方法总结(含破解软件下载链接)

    眼下网上流行有非常多无线password的破解方法,总结起来最有用的还是这两种:第一种是Wirelessnetview+WinAirCrackPack软件组合,这个方法简单方便:另外一种就是大家熟悉的 ...

  5. eclipse中build workspace的相关优化

    网上流传的各种的eclipse的调优的方法都大同小异,但是调优的基本上针对eclipse或者myclipse的本身,比如关掉validate和启动项,文件拼写,和自动构建等,调过之后,等个eclips ...

  6. Poj 3246 Balanced Lineup(线段树基础)

    依旧是线段树基础题 询问区间的最大值和最小值之差,只有询问,没有插入删除.继续理解基础线段树 #include <iostream> #include <algorithm> ...

  7. jquery ajax调用返回json格式数据处理

    Ajax请求默认的都是异步的 如果想同步 async设置为false就可以(默认是true) var html = $.ajax({ url: "some.php", async: ...

  8. java.lang.NoClassDefFoundError: org/apache/lucene/analysis/synonym/SynonymFilter

    2013-6-24 13:28:51 org.apache.solr.common.SolrException log 严重: java.lang.NoClassDefFoundError: org/ ...

  9. Python 3语法小记(四)字典 dictionary

    字典是Python里面一种无序存储结构,存储的是键值对 key - value.关键字应该为不可变类型,如字符串.整数.包含不可变对象的元组. 字典的创建很简单,用 d = {key1 : value ...

  10. IOS之【属性列表】

    @implementation JamesWongViewController - (void)viewDidLoad { [superviewDidLoad]; [selfwritePerson]; ...