問題描述
有k個整數陣列,各包含k個元素,從每個陣列中選取乙個元素加起來,可以得到k^k個和,求這些和中最小的k個值。
輸入格式
第一行,乙個整數k(k<=500)
接下來k行,每行k個正整數(<=1000000)
輸出格式
一行,k個有小到大排列的整數,表示最小的k個和
樣例輸入 1
3 1 8 5
9 2 5
10 7 6
樣例輸出 1
9 10 12
樣例輸入 2
2 1 1
1 2樣例輸出 2
2 2多路合併水題
顯然之前所得k個最小和加上此時陣列的最小和為當前最小和。
排序後能得到
1.1>1.2>1.3…2.1>2.2>2.3..
3.1>3.2>3.3..
k.1>k.2>k.3..
所以先將1-k進隊後依次討論用優先佇列維護
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define inf 1e9
#define pr cout<<
priority_queueq;
int temp[505],a[505];
int k,i,j;
void work()
int cnt=0;
for(i=1;i<=k;i++)
}for(i=k;i>=1;i--) a[i]=q.top(),q.pop();
}int main()
for(i=1;i<=k;i++) cout
<" ";
}
NKOJ3765 k個最小和
問題描述 有k個整數陣列,各包含k個元素,從每個陣列中選取乙個元素加起來,可以得到k k個和,求這些和中最小的k個值。輸入格式 第一行,乙個整數k k 500 接下來k行,每行k個正整數 1000000 輸出格式 一行,k個有小到大排列的整數,表示最小的k個和 樣例輸入 1 3 1 8 5 9 2 ...
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 750 已知前m行最小的前k個和d 1 d k 則前m 1行最小的前k個和都必定是d i i k a m 1 x 排序,列舉x,用優先佇列處理。學會了個小技巧 node形式的優先佇列,想直接插入元素組成node struct n...