乙個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 #include10using
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 ...