过节(festival.cpp/c/pas)

Dxy帮老师们过教师节的时候需要购买礼物。货架上有n 种礼物,每种礼物有不同的个数。每种礼物有价值和花费两种属性,帮他算出最大可以得到的价值。M是带的钱数有多少

Input:

第一行两个数n,m

第2到n+1行:每行三个数a,b,c,表示一种礼物的个数,花费和价值。

 

Output:

最大可得价值。

 

样例输入:

1  1

1  1  1

 

样例输出:

1


多重背包 也可以拆开做01背包QAQ

背包教程百度背包九讲 || 阅读

http://transcoder.baidu.com/from=844b/bd_page_type=1/ssid=d6c350616c6164696e3130303130302d71/uid=0/pu=usm%401%2Csz%401320_1001%2Cta%40iphone_2_4.4_3_537/baiduid=864138CF7B44F345487B864DC214C0DF/w=0_10_/t=iphone/l=3/tc?ref=www_iphone&lid=1744986806270038500&order=2&fm=alop&tj=www_normal_2_0_10_title&vit=osres&m=8&srd=1&cltj=cloud_title&asres=1&title=%E8%83%8C%E5%8C%85%E4%B9%8B01%E8%83%8C%E5%8C%85%E5%AE%8C%E5%85%A8%E8%83%8C%E5%8C%85%E5%A4%9A%E9%87%8D%E8%83%8C%E5%8C%85%E8%AF%A6%E8%A7%A3-Tan..._%E5%8D%9A%E5%AE%A2%E5%9B%AD&dict=30&w_qd=IlPT2AEptyoA_yk574oovA75HCdSjoS&sec=15106&di=95beeae6623de50a&bdenc=1&tch=124.0.0.0.0.0&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_ytK1DK6mlrte4viZQRAVj06K7_dFEb7gTCcg2tSaC8hOnEobxB0r_x6sVsf8Gjb9fvtdhPsHBEZhgNmOhz_XC5o&eqid=18377041457812001000000157d3e2a9&wd=&clk_info=%7B%22srcid%22%3A%221599%22%2C%22tplname%22%3A%22www_normal%22%2C%22t%22%3A1473504051781%2C%22xpath%22%3A%22div-a-h3%22%7D

//楼上网址很长对吗 我也觉得QAQ

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#define MOD 99999997
#define tips 100004
using namespace std;
int f[],n,m,cnt=;
int a[],b[];
int main()
{
freopen("festival.in","r",stdin);freopen("festival.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&z,&y);
for(int j=;j<=x;j++)a[++cnt]=y,b[cnt]=z;
}
for(int i=;i<=cnt;i++)
for(int j=m;j>=a[i];j--)
f[j]=max(f[j],f[j-a[i]]+b[i]);
int ans=;
for(int i=;i<=m;i++)ans=max(ans,f[i]);
cout<<ans<<endl;
fclose(stdin);fclose(stdout);
return ;
}

搞成01背包


a*b(mod.cpp/c/pas)

没错dxy的题目就是这么简单。

输入:

第一行一个数t,表示有t个数据

第2到第t+1行,每行三个正整数a,b,c (a,b,c<=10^18)

输出:对于每组数据输出(a*b)%c

 

样例输入:

1

1   2    3

样例输出:

2


思想大概就是把两个数分成几个数的和 然后就能乘了

压行写的话三行搞定QAQ

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn
using namespace std; int n; long long mul(long long a, long long b, long long p)
{ // a * b % p;
long long ret = ;
for (int i = ; ~ i; -- i)//~ >=0
ret = (ret + ret) % p, b & (1ll << i) ? ret = (ret + a) % p : ;
return ret % p;
} int main()
{
freopen("mod.in","r",stdin);
freopen("mod.out","w",stdout);
cin>>n;
long long a,b,c;
for(int i=;i<=n;++i)
{
scanf("%lld%lld%lld",&a,&b,&c);
printf("%lld",mul(a,b,c));
puts("");
}
fclose(stdin);fclose(stdout);
return ;
}

%%%YJL


扫描(scan.cpp/c/pas)

【题目描述】

有一个 1  n 的矩阵,有 n 个正整数。

现在给你一个可以盖住连续的 k 的数的木板。

一开始木板盖住了矩阵的第 1  k 个数,每次将木板向右移动一个单位,直到右端与

第 n 个数重合。

每次移动前输出被覆盖住的最大的数是多少。

【输入格式】

从 scan.in 中输入数据

第一行两个数,n,k,表示共有 n 个数,木板可以盖住 k 个数。

第二行 n 个数,表示矩阵中的元素。

【输出格式】

输出到 scan.out 中

 n − k + 1 行,每行一个正整数。

 i 行表示第 i  i + k − 1 个数中最大值是多少。

【样例输入】

5 3

1 5 3 4 2

【样例输出】

5

5

4

【数据规模与约定】

对于 20% 的数据保证:1 ≤ n ≤ 10^3,1 ≤ k ≤ n

对于 50% 的数据保证:1 ≤ n ≤ 10^4,1 ≤ k ≤ n

对于 100% 的数据保证:1  n  2  10^51  k  n

矩阵中元素大小不超过 104。


线段树

笔记见分类:算法学习->线段树笔记√

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 800005
#define inf 2000022800
using namespace std;
int n,k;
int a[];
int ll[maxn],rr[maxn];
int max1[maxn]; int MAX(int a,int b)
{
if(a>b)return a;
else return b;
} int MIN(int a,int b)
{
if(a<b)return a;
else return b;
} void build(int pos,int l,int r)
{
ll[pos]=l,rr[pos]=r;
if(l==r)
{
max1[pos]=a[l];
return;
}
int mid=l+r>>;
build(pos<<,l,mid);
build(pos<<|,mid+,r);
max1[pos]=MAX(max1[pos<<],max1[pos<<|]);
} int query(int pos,int l,int r)
{
l=MAX(ll[pos],l),r=MIN(rr[pos],r);
if(l>r)return -*inf;//²éѯmax¾Í-inf£¬min¾Íinf£¬sum¾Í0
if(l==ll[pos]&&r==rr[pos]) return max1[pos];
int mid=l+r>>;
return MAX(query(pos<< , l , r) , query(pos<<| , l , r));
} int main()
{
// freopen("disappear.in","r",stdin);
// freopen("disappear.out","w",stdout);
cin>>n>>k;
for(int i=;i<=n;++i)
{
scanf("%d",&a[i]);
}
build(,,n);
for(int i=;i<=n-k+;++i)
{
printf("%d",query(,i,i+k-));
puts("");
}
puts("");
fclose(stdin);fclose(stdout);
return ;
}

DXY的消失

题目描述

给出 N 个点,M 条边的有向图,对于每个点 v,求 D(v) 表示从点 v 出发,能到达的编号最大的点。

 

输入格式

第 1 行,2 个整数 N,M。 接下来 M 行,每行 2 个整数 Ui,Vi,表示边 ⟨Ui,Vi⟩。点用 1,2,...,N 编号。

 

输出格式

N 个整数 D(1),D(2),...,D(N)

样例输入

4 3

1 2

2 4

4 3

样例输出

4 4 3 4

数据范围

对于 60% 的数据,1 ≤ N,M ≤ 1000

对于 100% 的数据,1 ≤ N,M ≤ 100000。


① 学习tarjan

②把图变成反图,从最大的点开始走,走过的点就不要走了。比如编号最大的点是5,那就把能走到5的点都标记成5,然后把这些点删掉。

是《挑战程序设计竞赛》上的例题,详解见P320

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#define MAX 100005
using namespace std;
vector<int> G[MAX],rG[MAX],vs;
int used[MAX],cmp[MAX],ans[MAX];
int V,m; void add(int from,int to)
{//·´ÏòµÄ·´Ïò±ß
G[from].push_back(to);
rG[to].push_back(from);
} void dfs(int v)
{
used[v]=;
for(int i=;i<G[v].size();i++)
{
if(!used[G[v][i]]) dfs(G[v][i]);
}
vs.push_back(v);
}
void rdfs(int v,int k)
{
used[v]=;
cmp[v]=k;
for(int i=;i<rG[v].size();i++)
{
if(!used[rG[v][i]]) rdfs(rG[v][i],k);
}
ans[k]=max(ans[k],v);
for(int i=;i<rG[v].size();i++)
{
ans[k]=max(ans[k],ans[cmp[rG[v][i]]]);
}
} int scc()
{
memset(used,,sizeof(used));
vs.clear();
for(int v=;v<=V;v++)
{
if(!used[v]) dfs(v);
}
memset(used,,sizeof(used));
int k=;
for(int i=vs.size()-;i>=;i--)
{
if(!used[vs[i]]) rdfs(vs[i],k++);
}
} int main()
{
freopen("disappear.in","r",stdin);
freopen("disappear.out","w",stdout);
scanf("%d%d",&V,&m);
for(int i=;i<=m;i++)
{
int from,to;
scanf("%d%d",&from,&to);
add(to,from);//·´Ïò
}
scc();
for(int i=;i<=V;i++)printf("%d ",ans[cmp[i]]);
puts("");
return ;
}

套题T6的更多相关文章

  1. 第46套题【STL】【贪心】【递推】【BFS 图】

    已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...

  2. Educational Codeforces Round 15 套题

    这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...

  3. 【套题】qbxt国庆刷题班D1

    Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...

  4. Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告

    写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...

  5. Tarjan & LCA 套题题目题解

    刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...

  6. 套题 codeforces 361

    A题((Mike and Cellphone) 看起来好像需要模拟数字键位的运动,可是,只要判断出那些必然YES的数字组合不就好了么 #include <cstdio> #include ...

  7. 套题 codeforces 360

    A题:Opponents 直接模拟 #include <bits/stdc++.h> using namespace std; ]; int main() { int n,k; while ...

  8. 套题 codeforces 359

    A题:Free Ice Cream 注意要使用LL,避免爆int #include <bits/stdc++.h> #define scan(x,y) scanf("%d%d&q ...

  9. 套题 bestcoder 84

    A题:Aaronson 静下心来观察就会发现1.如果m大于等于n的位数,那么n直接写成二进制形式就是最优解形式2.如果m小于n的位数,那么贪心地使得高位尽可能地多消掉n的值,因为高位少写一个数就意味着 ...

随机推荐

  1. ADO.NET笔记——基本概念

    ADO.NET中的主要对象: Connection:连接对象.用于建立从应用程序到数据库服务器指定数据库的连接通道 Command:命令对象.用于执行增删查改等数据库语句命令 DataReader:数 ...

  2. git 的使用(4)-git暂缓区工作区原理和修改删除等命令

    文章转载自:http://blog.csdn.net/think2me/article/details/39056379 博主说未经本人允许,不得转载,那就不贴了,拷贝关键部分作备忘 1. 暂存区是G ...

  3. OpenSUSE 安装并启动Tomcat

    安装.用YsST2搜索tomcat安装就好了.不过版本肯定不如官网的新,笔者用的是7.0.42,最新的已经到8.X了. 启动.在服务管理器中找到tomcat,启动.

  4. JS重写alert,保证弹窗错误的友好性

    // ------------------------------------------------------------- // 重写alert,保证弹窗错误的友好性 var j_oldAler ...

  5. vim配置python开发环境

    vim配置python开发环境 一.安装vim sudo apt-get install vim 二.vim基础配置 #Centos6.5 /usr/share/vim/vim72 vi /etc/v ...

  6. Linux驱动开发之开篇--HelloWorld

    Linux驱动的编写,大致分为两个过程,第一个过程为测试阶段,即为某一具体的设备,添加必要的驱动模块,为了节省编译时间,需要将代码单独放在一处,在编译时,只需要要调用内核的头文件即可:第二个过程为布置 ...

  7. 一个订单相关的存储过程(MySQL)

    BEGIN DECLARE currentDate VARCHAR(15) ;/*当前日期,有可能包含时分秒 */ DECLARE maxNo INT DEFAULT 0 ; /* 离现在最近的满足条 ...

  8. OGG配置

    准备安装和运行用户(操作系统用户) 建议使用oracle用户 也可以使用新建用户:但是需要做配置 必须缴入到oinstall 组 必须使用和oracle相同的profile 操作系统必须为该用户开放一 ...

  9. 基于UUID生成短ID

    为什么需要短ID 数据库操作过程最常用到: 自增ID UUID 前者多数依赖Mysql的auto_increment,但数据移植麻烦. 如果是主从或主主,不同库里自增ID还可能不一致. 后者长度是个问 ...

  10. 小兵眼中的Java Struts2

        老魏终于可以回园子了,但是这次要慢慢的回来,不能一下子回来,这段时间除了要照顾刚出生的小女儿,还要做项目.说实在的老魏时间真是有限,不能照顾到园子的文章了,所以只能慢慢的回来写文章了.抱歉! ...