Wannafly挑戰賽26-B 冥土追魂(貪心?思維?模擬?)
阿新 • • 發佈:2018-11-02
轉載出自 https://blog.csdn.net/c_13579/article/details/83039005
貪心不行,數學思維尋找它的選取規律
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<cmath> #define maxn 1005 #define INF 0x3f3f3f3f #define LL long long #define PI 3.1415926 #define e 2.7182818 using namespace std; int n,m,k; LL a[maxn][maxn]; LL qz[maxn][maxn]; bool cmp(int a,int b) { return a>b; } struct node { LL sum; int id; friend bool operator <(node a,node b) { return a.sum<b.sum; } }s[maxn]; int main() { //ios::sync_with_stdio(false); cin>>n>>m>>k; LL ans,now; ans=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; } sort(a[i]+1,a[i]+m+1,cmp); } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { qz[i][j]=qz[i][j-1]+a[i][j]; } ans+=qz[i][m]; s[i].sum=qz[i][m]; s[i].id=i; } sort(s+1,s+1+n); int cnt=0; for(int i=1;i<=n;i++) { cnt=0; now=qz[i][k%m]; for(int j=1;j<=n;j++) { if(cnt==k/m) break; if(s[j].id==i&&k%m) continue; now+=s[j].sum; cnt++; } ans=min(ans,now); } cout << ans << endl; return 0; }