10426: 动漫
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 33 Solved: 12
[ Submit][ Status][ Web Board]
Description
实验室某学长最近喜欢上了看动漫,他下了n部动漫,但是为了保证刷题时间他决定只看其中的一部分 ,但是因为他的时间比较零碎,所以他想知道在这些动漫中如果他有t的时间的时候能不能完整的看完一集或者多集动漫。而且不浪费时间,也就是在这个t时间长度他能否刚好能看完至少一集动漫。
当然他每部动漫只会看一次。
Input
输入第一行代表测试样例数T。
每组样例第一行有两个整数n,t(0<=n<=100)(0 <= t <= 1000)。
第二行有n个数字ai,代表每一部动漫的长度(0 <= ai <= 1000)。
Output
对于每一个样例输出一行“Yes”或者“No”,代表学长能否在t的时间内能刚好完整看完一部动漫或者多部动漫。
Sample Input
3
1 20
20
3 50
30 20 40
2 50
40 20
Sample Output
Yes
Yes
No
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[1010]; int dp[1010]; int main() { int t,n,w; int i,j; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&w); for(i=0;i<n;i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) { for(j=w;j>=a[i];j--) { dp[j]=max(dp[j],dp[j-a[i]]+a[i]); } } if(dp[w]==w) printf("Yes\n"); else printf("No\n"); } return 0; }