#include<bits/stdc++.h>#define int lltypedeflonglong ll;constint INF =0x3f3f3f3f3f;constint mod =1e9+7;constint maxn =3e5+10;constint N=1011;usingnamespace std;int dp[N][N];int v[N],e[N];voidsolve(){int n,vv;
cin>>n>>vv;for(int i =1; i <=n;++i) cin>>e[i];for(int i =1; i <=n;++i) cin>>v[i];memset(dp,0,sizeof(dp));for(int i =1; i <=n;++i){for(int j =0; j <=vv;++j){if(v[i]>j) dp[i][j]=dp[i-1][j];else dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+e[i]);}}
cout<<dp[n][vv]<<endl;}signedmain(){//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _ =1;
cin >> _;while(_--)solve();return0;}
#include<bits/stdc++.h>#define int lltypedeflonglong ll;constint INF =0x3f3f3f3f3f;constint mod =1e9+7;constint maxn =3e5+10;constint N=1011;usingnamespace std;int dp[N];int v[N],e[N];voidsolve(){int n,vv;
cin>>n>>vv;for(int i =1; i <=n;++i) cin>>e[i];for(int i =1; i <=n;++i) cin>>v[i];memset(dp,0,sizeof(dp));for(int i =1; i <=n;++i){for(int j =vv; j>=v[i];--j){
dp[j]=max(dp[j],dp[j-v[i]]+e[i]);}}
cout<<dp[vv]<<endl;}signedmain(){//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _ =1;
cin >> _;while(_--)solve();return0;}
5.
#include<bits/stdc++.h>#define int lltypedeflonglong ll;constint INF =0x3f3f3f3f3f;constint mod =1e9+7;constint maxn =1e6+10;constint N =1011;usingnamespace std;int s[maxn];int dp[maxn], mm[maxn];voidsolve(){int n, m;while(cin >> m >> n){int max_;for(int i =1; i <=n;++i) cin >> s[i];memset(dp,0,sizeof(dp));memset(mm,0,sizeof(mm));for(int i =1; i <=m;++i){
max_=-INF;for(int j = i; j <= n;++j){//mm[j-1]目前代表的是i-1组 前j-1个数的最大数,a[j]单独一组组成i组//dp[j-1]代表j-1个数分成组,第j个数a[j]放在前面i组的一组中,两种方式选取最大者
dp[j]=max(dp[j-1]+s[j],mm[j-1]+s[j]);//当前考虑的是j但是mmax是上一次循环得到的,所以更新的是j-1
mm[j-1]=max_;//更新mmax,这样下次分i+1组的时候就可以使用了.
max_=max(dp[j],max_);}}
cout<<max_<<endl;}}signedmain(){//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _ =1;// cin >> _;while(_--)solve();return0;}
#include<bits/stdc++.h>/*#define int ll
typedef long long ll;
const int INF = 0x3f3f3f3f3f;
const int mod = 1e9 + 7;
const int maxn = 1e6 + 10;*/constint N =221;usingnamespace std;double dp[2][N];/*void solve() {
}*/signedmain(){/*// ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int _ = 1;
// cin >> _;
while (_--) solve();
return 0;*/int n, m, l, r;while(scanf("%d%d%d%d",&n,&m,&l,&r)==4){if(n ==0&& m ==0&& l ==0&& r ==0)break;
dp[0][0]=1;for(int i =1; i < n;++i) dp[0][i]=0;int now =0;//记录本次状态与上次状态标志while(m--){int d;scanf("%d",&d);for(int i =0; i < n;++i){//注意这是个环,本次状态由上次状态来决定
dp[now ^1][i]=0.5* dp[now][(i - d + n)% n]+0.5* dp[now][(i + d)% n];}
now ^=1;}double g =0;for(int j = l-1; j <r;++j) g += dp[now][j];printf("%.4lf\n", g);}return0;}
#include<bits/stdc++.h>#define int lltypedeflonglong ll;constint INF =0x3f3f3f3f3f;constint mod =1e9+7;constint maxn =1e6+10;constint N =50;usingnamespace std;int dp[2][(1<<20)+5];int k[N];intsolve(){int n, m;
cin >> n >> m;for(int i =1; i <=n; i++)cin >> k[i];sort(k, k + n);memset(dp,0,sizeof(dp));
dp[0][0]=1;for(int i =1; i <= n;++i){for(int j =0; j <(1<<20);++j){
dp[i %2][j]= dp[(i -1)%2][j]+ dp[(i -1)%2][j ^ k[i]];}}int sum =0;for(int i = m; i <(1<<20);++i)
sum += dp[n %2][i];return sum;}signedmain(){// ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int _ =1,cnt=0;
cin >> _;while(_--){int t=solve();
cout<<"Case #"<<++cnt<<": "<<t<<endl;}return0;}
dp学习1.#include <bits/stdc++.h>#define int lltypedef long long ll;const int INF = 0x3f3f3f3f3f;const int mod = 1e9 + 7;const int maxn = 3e5 + 10;const int N=205;using namespace std;void solve(){ int dp[251]; int type[5]={1,5,10,25,5