好简单啊。。

T1裸分层图最短路。

T2裸容斥。

T3更水的DP。

代码

T1

#include <bits/stdc++.h>

#define rin(i,a,b) for(register int i=(a);i<=(b);++i)
#define irin(i,a,b) for(register int i=(a);i>=(b);--i)
#define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
typedef long long LL; using std::cin;
using std::cout;
using std::endl; inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
} const int MAXN=50005;
const int MAXM=100005; int n,m,k,ecnt,head[MAXN<<1];
LL dis[MAXN<<1];
bool book[MAXN<<1]; struct Edge{
int to,nxt,w;
}e[MAXM*4+MAXN]; inline void add_edge(int bg,int ed,int val){
++ecnt;
e[ecnt].to=ed;
e[ecnt].nxt=head[bg];
e[ecnt].w=val;
head[bg]=ecnt;
} std::queue<int> q; void spfa(){
while(!q.empty()) q.pop();
memset(dis,0x3f,sizeof dis);
dis[n]=0;
q.push(n);
book[n]=true;
while(!q.empty()){
int x=q.front();
trav(i,x){
int ver=e[i].to;
if(dis[ver]>dis[x]+e[i].w){
dis[ver]=dis[x]+e[i].w;
if(!book[ver]){
q.push(ver);
book[ver]=true;
}
}
}
q.pop();
book[x]=false;
}
} int main(){
n=read(),m=read(),k=read();
rin(i,1,m){
int u=read(),v=read(),w=read();
add_edge(u,v,w);
add_edge(v,u,w);
add_edge(u+n,v+n,w);
add_edge(v+n,u+n,w);
}
rin(i,1,k){
int x=read(),y=read();
add_edge(x,x+n,-y);
}
spfa();
rin(i,1,n-1){
if(dis[n+i]<=dis[i]) printf("1\n");
else printf("0\n");
}
return 0;
}

T2

#include <bits/stdc++.h>

#define rin(i,a,b) for(register int i=(a);i<=(b);++i)
#define irin(i,a,b) for(register int i=(a);i>=(b);--i)
#define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
typedef long long LL; using std::cin;
using std::cout;
using std::endl; inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
} typedef std::pair<int,int> tw;
typedef std::pair<int,tw> tr;
typedef std::pair<tw,tw> fo;
typedef std::pair<tw,tr> fi; inline tw mktw(int x,int y){
return (tw){x,y};
} inline tr mktr(int x,int y,int z){
return (tr){x,mktw(y,z)};
} inline fo mkfo(int x,int y,int z,int v){
return (fo){mktw(x,y),mktw(z,v)};
} inline fi mkfi(int x,int y,int z,int v,int w){
return (fi){mktw(x,y),mktr(z,v,w)};
} int n;
int mp1[1000005];
std::map<tw,int> mp2;
std::map<tr,int> mp3;
std::map<fo,int> mp4;
std::map<fi,int> mp5; int main(){
n=read();
rin(i,1,n){
int a[6];
a[1]=read(),a[2]=read(),a[3]=read(),a[4]=read(),a[5]=read();
std::sort(a+1,a+6);
int x=a[1],y=a[2],z=a[3],v=a[4],w=a[5];
++mp1[x];
++mp1[y];
++mp1[z];
++mp1[v];
++mp1[w];
++mp2[mktw(x,y)];
++mp2[mktw(x,z)];
++mp2[mktw(x,v)];
++mp2[mktw(x,w)];
++mp2[mktw(y,z)];
++mp2[mktw(y,v)];
++mp2[mktw(y,w)];
++mp2[mktw(z,v)];
++mp2[mktw(z,w)];
++mp2[mktw(v,w)];
++mp3[mktr(x,y,z)];
++mp3[mktr(x,y,v)];
++mp3[mktr(x,y,w)];
++mp3[mktr(x,z,v)];
++mp3[mktr(x,z,w)];
++mp3[mktr(x,v,w)];
++mp3[mktr(y,z,v)];
++mp3[mktr(y,z,w)];
++mp3[mktr(y,v,w)];
++mp3[mktr(z,v,w)];
++mp4[mkfo(x,y,z,v)];
++mp4[mkfo(x,y,z,w)];
++mp4[mkfo(x,y,v,w)];
++mp4[mkfo(x,z,v,w)];
++mp4[mkfo(y,z,v,w)];
++mp5[mkfi(x,y,z,v,w)];
}
LL ans=0;
rin(i,1,1000000) ans+=1ll*mp1[i]*(mp1[i]-1)/2;
for(register std::map<tw,int>::iterator it=mp2.begin();it!=mp2.end();++it) ans-=1ll*it->second*(it->second-1)/2;
for(register std::map<tr,int>::iterator it=mp3.begin();it!=mp3.end();++it) ans+=1ll*it->second*(it->second-1)/2;
for(register std::map<fo,int>::iterator it=mp4.begin();it!=mp4.end();++it) ans-=1ll*it->second*(it->second-1)/2;
for(register std::map<fi,int>::iterator it=mp5.begin();it!=mp5.end();++it) ans+=1ll*it->second*(it->second-1)/2;
printf("%lld\n",1ll*n*(n-1)/2-ans);
return 0;
}

T3

#include <bits/stdc++.h>

#define rin(i,a,b) for(register int i=(a);i<=(b);++i)
#define irin(i,a,b) for(register int i=(a);i>=(b);--i)
#define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
typedef long long LL; using std::cin;
using std::cout;
using std::endl; inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
} const int MAXN=10005;
const int MAXK=1005; int n,k,a[MAXN],f[MAXN]; int main(){
n=read(),k=read();
rin(i,1,n) a[i]=read();
f[0]=0;
rin(i,1,n){
int temp=0;
irin(j,i,std::max(i-k+1,1)){
temp=std::max(temp,a[j]);
f[i]=std::max(f[i],f[j-1]+temp*(i-j+1));
}
}
printf("%d\n",f[n]);
return 0;
}

USACO2018DEC GOLD的更多相关文章

  1. Baskets of Gold Coins_暴力

    Problem Description You are given N baskets of gold coins. The baskets are numbered from 1 to N. In ...

  2. [UCSD白板题] Take as Much Gold as Possible

    Problem Introduction This problem is about implementing an algorithm for the knapsack without repeti ...

  3. XidianOJ 1120 Gold of Orz Pandas

    题目描述 Orz Panda is addicted to one RPG game. To make his character stronger, he have to fulfil tasks ...

  4. POJ 3274 Gold Balanced Lineup

    Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10924 Accepted: 3244 ...

  5. 哈希-Gold Balanced Lineup 分类: POJ 哈希 2015-08-07 09:04 2人阅读 评论(0) 收藏

    Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13215 Accepted: 3873 ...

  6. Gold Coins 分类: POJ 2015-06-10 15:04 16人阅读 评论(0) 收藏

    Gold Coins Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21767   Accepted: 13641 Desc ...

  7. 2012 #5 Gold miner

    Gold miner Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. Pots of gold game:看谁拿的钱多

    问题描述: Pots of gold game: Two players A & B. There are pots of gold arranged in a line, each cont ...

  9. [LOJ 1030] Discovering Gold

    B - Discovering Gold Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

随机推荐

  1. CNN中feature map、卷积核、卷积核的个数、filter、channel的概念解释

    CNN中feature map.卷积核.卷积核的个数.filter.channel的概念解释 参考链接: https://blog.csdn.net/xys430381_1/article/detai ...

  2. Codeforces 1201D. Treasure Hunting

    传送门 看一眼感觉就是 $dp$,但是似乎状态太多了 考虑推推性质 首先每到一行都要把所有宝藏都走到,那么一定会走到最左边的和最右边的宝藏 注意到一旦走完所有宝藏时肯定是在最左边或者最右边的宝藏位置 ...

  3. [转载]C++STL概述

    来源:https://www.cnblogs.com/dyllove98/p/3214898.html 什么是容器 首先,我们必须理解一下什么是容器,在 C++ 中容器被定义为:在数据存储上,有一种对 ...

  4. 06 基本数据结构 - 双端队列(Deque)

    一.双端队列(Deque) - 概念:deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变. - 特性:deque 特殊之处在于添加和删除项是非限制 ...

  5. 学习.NET中的AppDomain

    学习.NET中的AppDomain 什么是AppDomain?AppDomain是一组程序集的逻辑容器,AppDomain是为了提供隔离而设计的.它提供了保护.配置和终止其中每一个应用程序的隔离 Ap ...

  6. Shell编程备份数据库

    案例: 在/usr/sbin/建立Shell文件 备份后查看目录: 然后进行crontab任务调度: #每天凌晨两点十分调度一次 * * * /usr/sbin/mysql_db.sh

  7. symfony3 使用命令行工具生成Entity实体所踩的坑

    1.把配置文件汇总连接邮箱的配置信息注释掉了,在创建Entity时php bin/console doctrine:generate:entity报错 2. 错误原因是实体文件映射到数据库中的字段时候 ...

  8. 谷歌对Intel 10nm进度不满

    Intel 在 10nm 处理器上的节奏可谓是“龟速”,一拖三年,且目前大规模发货的 10nm Ice Lake 处理器仅仅是移动平台低电压,桌面要到明年. 表面波澜不惊,实际上却暗流涌动. 首先是 ...

  9. 七,ingress及ingress cluster

    目录 Service 类型 namespace 名称空间 Ingress Controller Ingress Ingress-nginx 进行测试 创建对应的后端Pod和Service 创建 Ing ...

  10. linux内核驱动module_init解析(1)

    本文转载自博客http://blog.csdn.net/richard_liujh/article/details/45669207 写过linux驱动的程序猿都知道module_init() 这个函 ...