洞穴奶牛第一话 (Cave Cow 1, USACO 2004 Open)

题目大意:

状压dp

#include<bits/stdc++.h>
using namespace std;
int dp[1<<15][105];
int maps[105][105],s[15];
int main()
{
    int n,m,k,ans=0,res=0;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=k;i++)
    {
        scanf("%d",&s[i]);
        if(s[i]==1) res++;
    }
    memset(maps,63,sizeof(maps));
    for(int i=1,u,v,w;i<=m;i++)
    {
        scanf("%d%d%d",&u,&v,&w);
        if(maps[u][v]>w)
            maps[u][v]=maps[v][u]=w;
    }
    for(int i=1;i<=n;i++) maps[i][i]=0;
    for(int p=1;p<=n;p++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(i!=j&&j!=p)
                {
                    if(maps[i][j]>99999) maps[i][j]=min(maps[i][p],maps[p][j]);
                    else maps[i][j]=max(maps[i][j],min(maps[i][p],maps[p][j]));
                }
    int sum=(1<<k)-1;
    for(int i=1;i<=sum;i++)
        for(int j=1;j<=k;j++)
            if(i&(1<<j-1))
                for(int p=1;p<=k;p++)
                    if(!(i&(1<<p-1)) && dp[i][j]<=maps[s[j]][s[p]])
                        dp[i|(1<<p-1)][p]=max(dp[i|(1<<p-1)][p],dp[i][j]+1);
    for(int i=1;i<=sum;i++)
        for(int j=1;j<=k;j++)
            if(dp[i][j]<=maps[1][s[j]])
                ans=max(ans,dp[i][j]);
    printf("%d",ans+res);       

}
时间: 2024-07-31 20:29:38

洞穴奶牛第一话 (Cave Cow 1, USACO 2004 Open)的相关文章

1861 奶牛的数字游戏 2006年USACO

codevs——1861 奶牛的数字游戏 2006年USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 奶牛们又在玩一种无聊的数字游戏.输得很郁闷的贝茜想请你写个程序来帮她在开局时预测结果.在游戏的开始,每头牛都会得到一个数N(1<=N<=1,000,000).此时奶牛们的分数均为0.如果N是奇数,那么奶牛就会把它乘以3后再加1.如果N是偶数,那么这个数就会被除以2.数字每变动一次,这头奶牛就得到1分.当N的

奶牛接力 (Cow Relays, USACO 2007 Nov)

题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race using the T (2 ≤ T ≤ 100) cow trails throughout the pasture. Each trail connects two different intersections (1 ≤ I1i ≤ 1,000; 1 ≤ I2i ≤ 1,000), each

USACO 2004 MooFest 奶牛集会

题目 问题描述 约翰的n 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶牛的坐标是相同的.奶牛们的叫声很大,第i 头和第j 头奶牛交流,会发出max{Vi;Vj}×|Xi?Xj| 的音量,其中Vi和Vj分别是第i 头和第j 头奶牛的听力. 假设每对奶牛之间同时都在说话,请计算所有奶牛产生的音量之和是多少. 输入文件 第1行:一个整数n(1n20,000) 第2

奶牛集会(MooFest, USACO 2004 Open)

题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶牛的坐标是相同的.奶牛们的叫声很大,第i 头和第j 头奶牛交流,会发出max{Vi; Vj}×|Xi ? Xj | 的音量,其中Vi 和Vj 分别是第i 头和第j 头奶牛的听力.假设每对奶牛之间同时都在说话,请计算所有奶牛产生的音量之和是多少.

Android简易实战教程--第一话《最简单的计算器》

转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51707931 从今天开始,本专栏持续更新Android简易实战类博客文章.和以往专栏不同,此专栏只有实例.每个实例尽量按照知识点对应相应一章节的内容去写,循序渐进.有些实例可能会与另一个专栏有重复的文章. 开始本专栏的第一个简易案例: 首先设置两个布局文件,一个布局文件进行输入数据,获取加法运算:另一个布局文件进行显示最终结果.Activity1启动Activity2,并传递计算

第一话-简单工厂模式

写在前面:本人最近在看<大话设计模式>这本书,书里是用C#讲解的实例.现在写心得笔记与大家分享,就试着写一个JAVA版的.例子还是书里的例子.不过是Java语言实现的.后面也会给出本人的一些理解建议.谢谢<大话设计模式>的作者. 一.什么是简单工厂模式? 简单工厂模式是工厂模式里最简单的一种,所以叫做简单工厂模式.简单工厂模式需要一个工厂类去对类的实例进行条件分发,这样可以省去程序分发时的麻烦,并且把分发的代码从主类中移到一个单独的类里,这样既能使代码简洁明了,有使代码灵活性争强.

Cow Navigation(USACO)

题目大意: 给定一个N*N的矩阵,并告诉你每一个格子能否经过,要求你求出(n,1)到(1,n)的最短路径的操作数. 其中操作有2种,第一种是沿着目前的方向走一格,第二种是向左或向右转90° 由于题目设置,一开始我们并不知道起点的方向,所以也可以理解为要我们求出朝向不同但位置相同的2个点的最短路径的方案数,但是注意,此时2个点的操作必须同时进行,比如要前进必须同时前进. 如果某一个点走到了边界外或者走到了不能经过的格子,那么他会返回并且不进行任何操作 如果一个点走到了终点那么接下来的指令它都不会执

[USACO] 2004 Open MooFest 奶牛集会

题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶牛的坐标是相同的.奶牛们的叫声很大,第i 头和第j 头奶牛交流,会发出\(max{Vi, Vj}\) \(×\) \(|Xi ? Xj |\) 的音量,其中Vi 和Vj 分别是第i 头和第j 头奶牛的听力.假设每对奶牛之间同时都在说话,请计算所有

[USACO08NOV]安慰奶牛Cheering up the Cow

这个题一看就是最小生成树,但是这题关键是确定边权. 首先为了安慰奶牛,一定要遍历每个奶牛并且回到起点,所以每条边会被经过两次,而为了通过这条边必须和两端点奶牛谈话,因此要再加上两端点的c值.综上(i,j)边权为l(i,j)  * 2 + c_i + c_j. #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #define N 10010 #define M 1000