uva11997 k個最小和

2021-09-12 10:17:57 字數 1021 閱讀 1003

乙個k*k的矩陣,每行選取乙個數相加則得到乙個和,求最小的前k個和。

k<=750

已知前m行最小的前k個和d[1]…d[k],則前m+1行最小的前k個和都必定是d[i](i<=k)+a[m+1][x]。排序,列舉x,用優先佇列處理。

學會了個小技巧:

node形式的優先佇列,想直接插入元素組成node

struct node裡加一句node (int sum,int

b):sum(sum),b(b) {} 實際呼叫:q.push(node(sum,b));

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10

using

namespace

std;

1112

const

int k=800;13

intk,a[k][k];

14bool cmp(int x,int y)

1516

struct

node

19bool

operator

< (const node &x) const

22};

2324 priority_queueq;

2526

void my_merge(int *a,int *b)

2736}37

38int

main()

3955 printf("

%d",a[1][1

]);56

for(int i=2;i<=k;i++) printf("

%d",a[1][i]);printf("\n"

);57}58

59return0;

60 }

posted @

2018-08-11 12:24

攔路雨偏似雪花 閱讀(

...)

編輯收藏

uva11997 k個最小和

乙個k k的矩陣,每行選取乙個數相加則得到乙個和,求最小的前k個和。k 750 已知前m行最小的前k個和d 1 d k 則前m 1行最小的前k個和都必定是d i i k a m 1 x 排序,列舉x,用優先佇列處理。學會了個小技巧 node形式的優先佇列,想直接插入元素組成node struct n...

UVA11997 K個最小和 優先佇列 K路合併

有k個整數陣列,包含k個元素。在每個陣列中取乙個元素加起來,可以得到k k個和。求這些和中最小的k個值 分析 這題有簡化版本的,即2個整數陣列a,b,包含k個元素,在每個陣列中取乙個元素加起來,可以得到k 2個和,求這些和中最小的k個值。我們需要把這k 2個和組織成如下k個有序表.表1 a1 b1 ...

P3765k個最小和

問題描述 有k個整數陣列,各包含k個元素,從每個陣列中選取乙個元素加起來,可以得到k k個和,求這些和中最小的k個值。輸入格式 第一行,乙個整數k k 500 接下來k行,每行k個正整數 1000000 輸出格式 一行,k個有小到大排列的整數,表示最小的k個和 樣例輸入 1 3 1 8 5 9 2 ...