Wannafly挑战赛5 B-购物

来源:互联网 发布:二维动画制作软件 编辑:程序博客网 时间:2024/04/27 20:31

点击打开链接

思路:糖果只要买够n个就够了,那么考虑第i天要吃的糖果在第j天买,这个j的范围就是1到i,否则当天就没糖果吃,水题;

#include<bits/stdc++.h>using namespace std;typedef long long ll;#define inf 0x3f3f3f3f#define maxn 310ll a[maxn][maxn];int flag[maxn];int main(){    int n,m;    ll ans=0;    scanf("%d%d",&n,&m);    for(int i=1;i<=n;i++){        for(int j=1;j<=m;j++){            scanf("%lld",&a[i][j]);        }        sort(a[i]+1,a[i]+1+m);        flag[i] = 1;//第i天的糖果从第几个开始还没有被买。    }    for(int i=1;i<=n;i++){         ll temp=inf,t=-1;        for(int j=1;j<=i;j++){//第i天的糖果在这天之前或者当天买,哪天买花费最少在哪天买            int x=a[j][flag[j]]+flag[j]*flag[j]-(flag[j]-1)*(flag[j]-1);//买第j天的第flag[j]件物品花费的增益            if(flag[j]<=m&&x<temp){                temp=x;                t=j;            }        }        ans+=temp;        flag[t]++;    }    cout<<ans<<endl;}


原创粉丝点击