玩具(toy)
題目描述
商店正在出售小C最喜歡的系列玩具,在接下來的n周中,每周會出售其中
的一款,同一款玩具不會重復出現。?
由于是小C最喜歡的系列,他希望盡可能多地購買這些玩具,但是同一款玩
具小C只會購買一個。同時,小C的預算只有m元,因此他無法將每一款都納入
囊中。此外,小C不能連續兩周都購買玩具,否則他會陷入愧疚。現在小C想知
道,他最多可以買多少款不同的玩具呢??
輸入說明
輸入文件共2行;?
第一行兩個正整數n和m,中間用一個空格隔開;?
第二行共n個正整數,第i個正整數表示第i周出售的玩具的價格。?
輸出說明
輸出文件只有一行,包含一個整數,表示小C最多能買多少款不同的玩具。
輸入輸出樣例
樣例輸入
3 8?
4 4 5?
樣例輸出
1?
數據范圍
對于30%的數據,n≤10;?
對于60%的數據,n≤100,m≤1000;?
對于100%的數據,n≤1000,m≤1000000,單個玩具的價格≤1000。?
這是一道簡單題! by sry。
設$f(i,j)$表示到第$i$個物品且買$j$個的最小花費,簡單轉移即可。
時間復雜度 $O(n^2)$。
但是數據很水所以$O(nm)=O(能過)$
? #include<iostream> #include<cstring> #include<cstdio> using namespace std; int n,m,a[1001],f[1000001],ans,now=1,last=2; bool pd[1000001][3]; int main() {cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){swap(now,last);for(int j=0;j<=m;j++)pd[j][last]=0;for(int j=m;j>=a[i];j--){ if(f[j-a[i]]+1>f[j]&&!pd[j-a[i]][now]){f[j]=f[j-a[i]]+1;pd[j][last]=1;}}}cout<<f[m];return 0; }
轉載于:https://www.cnblogs.com/szmssf/p/10834452.html
總結
- 上一篇: 使用ffmpeg裁剪和合并视频
- 下一篇: mpvue开发微信小程序之picker