洛谷 P1194 买礼物

题目描述

又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元。

但是,商店老板说最近有促销活动,也就是:

如果你买了第II样东西,再买第J样,那么就可以只花KI,J​元,更巧的是,KI,J​竟然等于KJ,I​。

现在明明想知道,他最少要花多少钱。

输入输出格式

输入格式:

第一行两个整数,A,B。

接下来BB行,每行B个数,第I行第J个为KI,J​。

我们保证KI,J​=KJ,I​并且KI,I​=0。

特别的,如果KI,J​=0,那么表示这两样东西之间不会导致优惠。

输出格式:

一个整数,为最小要花的钱数。

输入输出样例

输入样例#1: 复制

1 1
0
输出样例#1: 复制

1
输入样例#2: 复制

3 3
0 2 4
2 0 2
4 2 0
输出样例#2: 复制

7

说明

样例解释2

先买第2样东西,花费3元,接下来因为优惠,买1,3样都只要2元,共7元。

(同时满足多个“优惠”的时候,聪明的明明当然不会选择用4元买剩下那件,而选择用2元。)

数据规模

对30%的数据,1≤B≤10。

对于100%的数据,1≤B≤500,0≤A,KI,J​≤1000。

思路:直接求一边最小生成树,然后加上买第一件物品所花的费用,即A

注意:在原价比优惠价便宜时,应取优惠价

#include<algorithm>
#include<cstring>
#include<cstdio>
#include<ctime>
using namespace std;
const int M = ;
int n, m, k, tot, sum;
int fa[M];
struct nond {
int u, v, w;
}e[M]; int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
} bool cmp(nond x, nond y) {
return x.w < y.w;
} int main() {
scanf("%d%d", &n, &m);
for(int i = ; i <= m; i++) fa[i] = i;
for(int i = ; i <= m; i++)
for(int j = ; j <= m; j++) {
int a;
scanf("%d", &a);
if(a != && i < j) {
e[++k].u = i;
e[k].v = j;
e[k].w = a;
}
}
sort(e+, e+k+, cmp);
for(int i = ; i <= k; i++) {
int x = find(e[i].u), y = find(e[i].v);
if(x == y) continue;
srand(time() + );
if(rand()%) fa[x] = y;
else fa[y] = x;
tot++;
sum += e[i].w;
if(tot == n-) break;
}
sum += n;
printf("%d\n", sum);
return ;
}

90分,没有考虑原价低于优惠价的情况

#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int M = ;
int n, m, tot, sum, k;
int fa[M], f[M];
struct nond {
int u, v, w;
}e[M]; int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
} bool cmp(nond x, nond y) {
return x.w < y.w;
} int main() {
scanf("%d%d", &n, &m);
for(int i = ; i <= m; i++) fa[i] = i;
for(int i = ; i <= m; i++)
for(int j = ; j <= m; j++) {
int a;
scanf("%d", &a);
if(a != && i < j) {
e[++k].u = i;
e[k].v = j;
e[k].w = a;
}
}
sort(e+, e+k+, cmp);
for(int i = ; i <= k; i++) {
int x = find(e[i].u), y = find(e[i].v);
if(x == y) continue;
fa[x] = y;
tot++;
sum += min(n, e[i].w);
if(tot == n-) break;
}
sum += n;
printf("%d\n", sum);
return ;
}

AC代码

洛谷 P1194 买礼物的更多相关文章

  1. 洛谷——P1194 买礼物

    P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...

  2. 洛谷 P1194 买礼物 题解

    P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买\(B\)样东西,巧的是,这\(B\)样东西价格都是\(A\)元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第II样东西 ...

  3. P1194 买礼物(建模)

    P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...

  4. 洛谷P5364 [SNOI2017]礼物 题解

    传送门 /* 热情好客的小猴子请森林中的朋友们吃饭,他的朋友被编号为 1∼N,每个到来的朋友都会带给他一些礼物:大香蕉.其中,第一个朋友会带给他 11 个大香蕉,之后,每一个朋友到来以后,都会带给他之 ...

  5. 【洛谷 P4934】 礼物 (位运算+DP)

    题目链接 位运算+\(DP\)=状压\(DP\)?(雾 \(a\&b>=min(a,b)\)在集合的意义上就是\(a\subseteq b\) 所以对每个数的子集向子集连一条边,然后答案 ...

  6. 洛谷P1940买蛋糕

    题目传送门 题意:给定你一个数n,要求用最小个数的整数组成小于等于n的所有整数,并求出方案数. 很明显,擅长二进制的大犇们肯定一眼就看得出方案数是log2(n)+1,然而我并不擅长,但是推了一小会儿也 ...

  7. P1194 买礼物 洛谷

    https://www.luogu.org/problem/show?pid=1194 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近 ...

  8. 洛谷 P1194 【买礼物】

    这道题其实就是转化一个模型就可以了. 买了一个另外一个又优惠,其实就相当于在优惠的时候连一条边,因为不可能多买,所以就是建一棵最小生成树.最后因为肯定买了一件物品,要加上最初的单价. 代码: #inc ...

  9. 洛谷 P1490 买蛋糕 解题报告

    P1490 买蛋糕 题目描述 野猫过生日,大家当然会送礼物了(咳咳,没送礼物的同志注意了哈!!),由于不知道送什么好,又考虑到实用性等其他问题,大家决定合伙给野猫买一个生日蛋糕.大家不知道最后要买的蛋 ...

随机推荐

  1. iOS开发系列之四 - UITextView 使用方法小结

    // 初始化输入框并设置位置和大小 UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 10, 300, 1 ...

  2. Firefox中使用pac

    https://campus.barracuda.com/product/websecurityservice/article/WSS/ConfigProxyWithPACFile/ https:// ...

  3. Python(五) 包、模块、函数与变量作用域

    一.while循环与使用场景 CONDITION=1 while CONDITION <=5 : CONDITION +=1 print("hello") else: pri ...

  4. js数组中foEach和map的用法详解 jq中的$.each和$.map

    数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...

  5. 应对加密js的三种方法

    经常遇到网页在登录后会对用户输入的帐号和密码通过js进行加密,导致模拟登录这类网站时受到阻碍 这里小记一下当前解决该问题的三种方法 1.利用python实现js同等加密. 2.利用selenium模拟 ...

  6. DedeCMS版权信息SQL命令删除

    dedecms织梦系统底部会自动带有官方链接power by dedecms字样,很多新用户想去除官方的链接,底部调用标签为{dede:global.cfg_poweby/},方法很多,但不鼓励大家删 ...

  7. HDU——T 1166 敌兵布阵

    http://acm.hdu.edu.cn/showproblem.php?pid=1166 Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

  8. PhoneGap/Cordova Android应用签名公布注意事项

    今天最终要公布Android HybirdApp了,安装曾经做原生应用的流程公布签名Apk,没想到立即遇到了几个问题.如今把它们的解决的方法整理下来. export signed Apk 遇到以下错误 ...

  9. UML类图中的几种关系总结

           UML类图,描写叙述对象和类之间相互关系的方式包含:依赖(Dependency).关联(Association).聚合(Aggregation).组合(Composition).泛化(G ...

  10. 阿里云Redis使用规范

    一.键值设计 1.key名设计 (1)[建议]: 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id ugc:video:1 (2)[建议]: 简洁性 ...