Kkksc03的时间和金钱是有限的,所以他很难满足所有同学的愿望。所以他想知道在自己的能力范围内,最多可以完成多少同学的愿望?
输入输出格式
输入格式:
第一行,n M T,表示一共有n(n<=100)个愿望,kkksc03 的手上还剩M(M<=200)元,他的暑假有T(T<=200)分钟时间。
第2~n+1行 mi,ti 表示第i个愿望所需要的金钱和时间。
输出格式:
一行,一个数,表示kkksc03最多可以实现愿望的个数。
输入输出样例
输入样例#1: 复制
6 10 10 1 1 2 3 3 2 2 5 5 2 4 3
输出样例#1: 复制
4
一开始将 j,s放在一个for里遍历 导致漏掉了很多的状态 (想一想)
其他没什么难度
#include<bits/stdc++.h> using namespace std; //input #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m); #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s); #define LL long long #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) ////////////////////////////////// #define N 500+5 #define inf 0x3f3f3f3f int mp[N][N]; long long dp[N][N]; int main() { int n,m,k; RIII(n,m,k); rep(i,1,n) { int a,b; RII(a,b); for(int j=m;j>=a;j--) for(int s=k;s>=b;s--) dp[j][s]=max(dp[j][s],dp[j-a][s-b]+1); } cout<<dp[m][k]; }