这是一个沙雕题III(坑题)
生活随笔
收集整理的這篇文章主要介紹了
这是一个沙雕题III(坑题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
鏈接:https://ac.nowcoder.com/acm/contest/289/K
來源:牛客網
題目描述
因為現在的新生太強了,都學會了“dp”,所以就有了這樣一個“dp”題,雙11時Gugugu有(x,x+1,x+2…y-1,y)元的抵用券無數張,但是Gugugu有強迫癥所以他希望他使用抵扣券正好能夠抵扣k元,這樣他就能安心的買下這件商品,但是他卻不會計算所以希望你們告訴他能不能一種方法使抵用券正好抵扣k元。
輸入描述:
第一行輸入t代表有t組數據,第二行開始每行三個數k,x,y代表需要抵扣k元,x,y代表擁有抵用券的最小面值和最大面值。(1<=t<=200)(1<=k,x,y<109)(x<=y)
輸出描述:
輸出"Y"代表示能正好抵扣,輸出"N"代表不能正好抵扣
示例1
輸入
復制
2
7 2 4
6 4 5
輸出
復制
Y
N
真是沙雕題,更沙雕的是,我還信了,我還按著完全背包去做了,真的是,1e9的數據量,就算是能開出數組來也超時啊,啊啊啊
代碼如下:
完全背包代碼如下:
#include<bits/stdc++.h> #define ll long long #define inf 0x3f3f3f3f using namespace std;ll t,x,y,k;int main() {cin>>t;while(t--){cin>>k>>x>>y;int n=y-x+1;int a[n+1];int dp[k+1];int cnt=0;for(int i=x;i<=y;i++){a[cnt++]=i;}memset(dp,0,sizeof(dp));for(int i=0;i<cnt;i++){for(int j=a[i];j<=k;j++){dp[j]=max(dp[j],dp[j-a[i]]+a[i]);}}if(dp[k]!=k) cout<<"N"<<endl;else cout<<"Y"<<endl;} }努力加油a啊,(o)/~
總結
以上是生活随笔為你收集整理的这是一个沙雕题III(坑题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀(01背包)
- 下一篇: 这是一个沙雕题II(思维好题)