layout: post

title: (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest(爽题)

author: "luowentaoaa"

catalog: true

tags:

mathjax: true

- codeforces

- DP

- 状态压缩

- LCA


传送门

付队!

C - Greetings! (状态压缩)

题意

给N种信件,你可以任意选择K种信封装信件,问你最少的浪费是多少

不能大的信件装进小信封中

思路

首先如果可以选择的信封数量比N大 那么每一种信件用一个特定的信封肯定不会有浪费

因为数据很小我们考虑状态压缩考虑哪些信件用同一种信封

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll mod=1e9+7;
const int maxn=(1<<16)+50;
const int inf=1e8;
ll c[maxn];
struct node{
ll w,h,t;
}my[20];
ll dp[20][maxn]; int main()
{
int n,k;
cin>>n>>k;
memset(dp,127,sizeof(dp));
for(int i=0;i<n;i++)cin>>my[i].w>>my[i].h>>my[i].t;
for(int i=0;i<(1<<n);i++){
ll ww=0,hh=0,sum=0,cnt=0;
for(int j=0;j<n;j++){
if(i&(1<<j)){
sum+=my[j].w*my[j].h*my[j].t;
ww=max(ww,my[j].w);
hh=max(hh,my[j].h);
cnt+=my[j].t;
}
}
dp[1][i]=c[i]=(ww*hh*cnt-sum);
}
for(int i=2;i<=k;i++){
dp[i][0]=0;
for(int sta=0;sta<(1<<n);sta++){
for(int t=sta;t;t=(t-1)&sta){
dp[i][sta]=min(dp[i][sta],dp[i-1][t]+c[sta^t]);
}
}
}
cout<<dp[k][(1<<n)-1]; return 0;
}

F - Mountain Scenes (DP)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll mod=1e9+7;
const int maxn=5e5+50;
const int inf=1e8;
ll dp[150][25000]; int main()
{
int n,w,h;
cin>>n>>w>>h;
dp[0][0]=1;
for(int i=1;i<=w;i++){
for(int j=0;j<=n;j++){
for(int k=0;k<=h;k++){
dp[i][j+k]+=dp[i-1][j];
dp[i][j+k]%=mod;
}
}
}
ll ans=0;
for(int i=0;i<=n;i++){
ans+=dp[w][i];
ans%=mod;
}
if(w*h<=n)ans=(ans-h+mod-1)%mod;
else ans=(ans-n/w+mod-1)%mod;
cout<<ans<<endl;
return 0;
}

I - Tourists (LCA)

思路

很像wls面试我时出的题目

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll mod=1e9+7;
const int maxn=2e5+50;
const int inf=1e8; int Next[maxn<<1],To[maxn<<1],Laxt[maxn<<1];
int cnt;
void add(int u,int v){
Next[++cnt]=Laxt[u];Laxt[u]=cnt;To[cnt]=v;
} int n;
int fa[maxn][50],dep[maxn];
void dfs(int u,int faa){
fa[u][0]=faa;
dep[u]=dep[faa]+1;
for(int i=Laxt[u];i;i=Next[i]){
if(To[i]==faa)continue;
dfs(To[i],u);
}
}
void init(){
for(int i=1;i<=20;i++){
for(int j=1;j<=n;j++){
int f=fa[j][i-1];
fa[j][i]=fa[f][i-1];
}
}
}
int lca(int p,int q){
if(dep[p]<dep[q])swap(p,q);
for(int i=20;i>=0;i--){
if(dep[fa[p][i]]>=dep[q])p=fa[p][i];
}
if(p==q)return q;
for(int i=20;i>=0;i--){
if(fa[p][i]!=fa[q][i]){
p=fa[p][i];q=fa[q][i];
}
}
return fa[p][0];
}
int main()
{
scanf("%d",&n);
for(int i=1;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
add(u,v);add(v,u);
}
dfs(1,0);
ll ans=0;
init();
for(int i=1;i<=n;i++){
for(int j=2*i;j<=n;j+=i){
int f=lca(i,j);
ans+=dep[i]+dep[j]-2*dep[f]+1;
}
}
printf("%lld\n",ans);
return 0;
}

(寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest(爽题)的更多相关文章

  1. (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest

    layout: post title: (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest author: "luow ...

  2. (寒假开黑gym)2018 USP Try-outs

    layout: post title: (寒假开黑gym)2018 USP Try-outs author: "luowentaoaa" catalog: true tags: m ...

  3. ACM ICPC, JUST Collegiate Programming Contest (2018) Solution

    A:Zero Array 题意:两种操作, 1 p v  将第p个位置的值改成v  2  查询最少的操作数使得所有数都变为0  操作为可以从原序列中选一个非0的数使得所有非0的数减去它,并且所有数不能 ...

  4. ACM ICPC, Amman Collegiate Programming Contest (2018) Solution

    Solution A:Careful Thief 题意:给出n个区间,每个区间的每个位置的权值都是v,然后找长度为k的区间,使得这个区间的所有位置的权值加起来最大,输出最大权值, 所有区间不重叠 思路 ...

  5. (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)

    layout: post title: (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017) au ...

  6. 2018 ACM-ICPC, Syrian Collegiate Programming Contest

    2018 ACM-ICPC, Syrian Collegiate Programming Contest A Hello SCPC 2018! 水题 B Binary Hamming 水题 C Por ...

  7. Gym.102006:Syrian Collegiate Programming Contest(寒假自训第11场)

    学习了“叙利亚”这个单词:比较温和的一场:几何的板子eps太小了,坑了几发. A .Hello SCPC 2018! 题意:给定一个排列,问它是否满足,前面4个是有序的,而且前面4个比后面的都小. 思 ...

  8. ICPC — International Collegiate Programming Contest Asia Regional Contest, Yokohama, 2018–12–09 题解

    目录 注意!!此题解存在大量假算法,请各位巨佬明辨! Problem A Digits Are Not Just Characters 题面 题意 思路 代码 Problem B Arithmetic ...

  9. 2015 ACM Syrian Collegiate Programming Contest

    A. My Friend of Misery 计算出答案的上下界即可. 时间复杂度$O(n)$. #include<bits/stdc++.h> using namespace std; ...

随机推荐

  1. java与C#的基础语法区别--持续更新

    1.判断字符串是否相等 java : equals()比较的是对象的内容(区分字母的大小写格式),但是如果使用“==”比较两个对象时,比较的是两个对象的内存地址,所以不相等.即使它们内容相等,但是不同 ...

  2. 继承自UITableView的类自带tableView属性,不需要在创建该属性,因为父类UITableView已经创建.

      继承自UITableView的类自带tableView属性,不需要在创建该属性,因为父类UITableView已经创建.   https://www.evernote.com/shard/s227 ...

  3. 如果你也想写个完整的 Vue 组件项目

    1.一个完整的组件项目需要什么? 必要的: 组件构建方式 ( webpack / rollup 之类 ),并提供至少一个主流的输出格式 (ESModule) Demo 及 Demo 源码 文档,可以是 ...

  4. No 'Access-Control-Allow-Origin' Ajax跨域访问解决方案

    No 'Access-Control-Allow-Origin' header is present on the requested resource. 当使用ajax访问远程服务器时,请求失败,浏 ...

  5. 上传漏洞新姿势(限Linux)

    服务器:Linux当前环境:nginx/1.4.7PHP版本:PHP Version 7.0.0  上传情况简介:上传  111.jpg111 确实可以成功的但是上传  1.php.jpg1111.1 ...

  6. bind类成员函数

    首先描述一个情景: 先贴出代码: class Solution { public: bool compare(int a, int b) { return a > b; } int functi ...

  7. 64_j1

    JSCookMenu-2.0.4-13.fc26.noarch.rpm 13-Feb-2017 22:06 38098 Java-WebSocket-1.3.1-0.2.git58d1778.fc24 ...

  8. 高性能网络编程(1)—accept建立连接‍(待研究)

    阿里云博客上一篇感觉还不错的文章,待研究,原文链接如下: http://blog.aliyun.com/673?spm=5176.7114037.1996646101.3.oBgpZQ&pos ...

  9. [ python ] 类中的一些特殊方法

    item系列 __getitem__(self, item) 对象通过 object[key] 触发 __setitem__(self, key, value) 对象通过 object[key] = ...

  10. leetcode 之Remove Nth Node From End of List(19)

    这题比较简单,方法有很多.其中一种比较有意思的做法是设置两个指针,一个先走n步,然后再一起走.一个到了末尾,另一个也就确定了要删除元素的位置. ListNode *removeNthFromEnd(L ...