NC230967. 「Nhk R1 D」Apocryphal Vir Pulcher
描述
但是,她们并没有一次成型,反而,她们中的某些 WA 了很多发。每次 WA 掉 题会掉
rating。众所周知,Gaays 中的内卷很严重,扣的分数不是前
小的都会被淘汰。这引起的她们的恐慌,所以她们想知道,第
小的扣分到底会是多少。值得一提的是,没有任何一对 Gaays 在每一题WA的次数都相同。
Gaays 找到了你来帮忙,还说不帮忙就把你也变成 Gaay。请你帮帮她们吧。
定义两个序列 ,
相等当且仅当
,有
。
对于所有不相等的 ,可以求出一个序列
,求
中的第
小值。
输入描述
输入共两行。
第一行两个整数表示
和
。
第二行输入序列
。
输出描述
一行一个整数,表示第小值。
示例1
输入:
3 5 1 2 3
输出:
3
说明:
示例2
输入:
3 10 2 3 4
输出:
7
说明:
对于 的数据,
,
。
对于另外 的数据,
,
。
对于 的数据,
,
,
。
C++ 解法, 执行用时: 353ms, 内存消耗: 15692K, 提交时间: 2021-12-30 20:31:39
#include<bits/stdc++.h> using namespace std; #define ll long long const ll inf=1e9; int mo=1000000007,st=0; int n,m,k,f[10000000],no; int ksm(int a,int b){ int ret=1; for (;b;b/=2,a=1ll*a*a%mo) if (b&1) ret=1ll*ret*a%mo; return ret; } int main(){ scanf("%d%d",&n,&k); int m=4000000; f[0]=1; for (int i=1;i<=n;i++){ int x;scanf("%d",&x); for (int j=x;j<=m;j++){ f[j]+=f[j-x]; if (f[j]>k) f[j]=k; } } for (int i=0;i<=m;i++){ if (f[i]>=k){ cout<<i;return 0; } k-=f[i]; } }