标签:eve 决定 任务 max += std evel == size
我觉得黄学长刷的背包应该不会太水吧?!
选择第二个政党和第四个
//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn=1e5+10,INF=1e6; int n,a[310],tot; int f[maxn]; int aa;char cc; int read() { aa=0;cc=getchar(); while(cc<‘0‘||cc>‘9‘) cc=getchar(); while(cc>=‘0‘&&cc<=‘9‘) aa=aa*10+cc-‘0‘,cc=getchar(); return aa; } bool cmp(const int x,const int y) {return x>y;} int main() { n=read(); for(int i=1;i<=n;++i)a[i]=read(),tot+=a[i]; sort(a+1,a+n+1,cmp); memset(f,-1,sizeof(f)); f[0]=INF;tot/=2; for(int i=1;i<=n;++i) { for(int j=tot;j>=0;--j) if(f[j]!=-1) f[j+a[i]]=max(f[j+a[i]],min(f[j],a[i])); } for(int i=tot*2+1;i>tot;--i) if(i-f[i]<=tot) { printf("%d",i); return 0; } return 0; }
windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。
输入文件paint.in第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,‘0‘表示红色,‘1‘表示蓝色。
输出文件paint.out包含一个整数,最多能正确粉刷的格子数。
30%的数据,满足 1 <= N,M <= 10 ; 0 <= T <= 100 。 100%的数据,满足 1 <= N,M <= 50 ; 0 <= T <= 2500 。
竟然是SCOI的题。。。
//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn=50+5; int n,m,tot,cl[maxn],dp[maxn*maxn],f[maxn][maxn]; int main() { scanf("%d%d%d",&n,&m,&tot); int x; for(int i=1;i<=n;++i) { for(int j=1;j<=m;++j) scanf("%1d",&cl[j]),cl[j]+=cl[j-1]; memset(f,0,sizeof(f)); for(int j=1;j<=m;++j) for(int k=1;k<=j;++k) { x=cl[j]-cl[k-1];x=max(x,j-k+1-x); for(int t=1;t<=min(m,tot);++t) f[j][t]=max(f[j][t],f[k-1][t-1]+x); } for(int j=tot;j;--j) for(int k=1;k<=min(m,tot)&&k<=j;++k) dp[j]=max(dp[j],dp[j-k]+f[m][k]); } printf("%d",dp[tot]); return 0; }
一个吉他手准备参加一场演出。他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量。在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改变的音量是多少。每一次改变音量,他可以选择调高也可以调低。
音量用一个整数描述。输入文件中给定整数beginLevel,代表吉他刚开始的音量,以及整数maxLevel,代表吉他的最大音量。音量不能小于0也不能大于maxLevel。输入文件中还给定了n个整数c1,c2,c3…..cn,表示在第i首歌开始之前吉他手想要改变的音量是多少。
吉他手想以最大的音量演奏最后一首歌,你的任务是找到这个最大音量是多少。
第一行依次为三个整数:n, beginLevel, maxlevel。
第二行依次为n个整数:c1,c2,c3…..cn。
输出演奏最后一首歌的最大音量。如果吉他手无法避免音量低于0或者高于maxLevel,输出-1。
//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn=50+5,maxnum=1000+10; int n,x,d; bool f[maxn][maxnum]; int aa,ff;char cc; int read() { aa=0;cc=getchar();ff=1; while(cc<‘0‘||cc>‘9‘) { if(cc==‘-‘) ff=-1; cc=getchar(); } while(cc>=‘0‘&&cc<=‘9‘) aa=aa*10+cc-‘0‘,cc=getchar(); return aa*ff; } int main() { n=read();x=read();d=read(); f[0][x]=1; for(int i=1;i<=n;++i) { x=read(); for(int j=0;j<=d;++j) if(f[i-1][j]) { if(j+x<=d) f[i][j+x]=1; if(j-x>=0) f[i][j-x]=1; } } for(int j=d;j>=0;--j) if(f[n][j]) { printf("%d",j);return 0; } printf("-1"); return 0; }
4 2
1 2
2 3
4 1
6 2
2
10
解释:挑出的是第二颗和第三颗糖。
//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn=200+10,maxm=20+5; int n,m,a[maxn],b[maxn],dp[maxn][maxm][2*maxn]; int aa,ff;char cc; int read() { aa=0;cc=getchar();ff=1; while(cc<‘0‘||cc>‘9‘) { if(cc==‘-‘) ff=-1; cc=getchar(); } while(cc>=‘0‘&&cc<=‘9‘) aa=aa*10+cc-‘0‘,cc=getchar(); return aa*ff; } int main() { n=read();m=read(); memset(dp,-1,sizeof(dp));dp[0][0][200]=0; for(int i=1;i<=n;++i) a[i]=read(),b[i]=read(); for(int i=1;i<=n;++i) for(int j=0;j<=m;++j) for(int k=0;k<=400;++k) { if(j&&dp[i-1][j-1][k]!=-1) dp[i][j][k+a[i]-b[i]]=max(dp[i][j][k+a[i]-b[i]],dp[i-1][j-1][k]+a[i]+b[i]); dp[i][j][k]=max(dp[i][j][k],dp[i-1][j][k]); } for(int i=0;i<=200;++i) if(dp[n][m][200-i]!=-1||dp[n][m][200+i]!=-1) { printf("%d\n%d",i,max(dp[n][m][200-i],dp[n][m][200+i])); return 0; } return 0; } /* 4 2 1 2 2 3 4 1 6 2 */
标签:eve 决定 任务 max += std evel == size
原文地址:http://www.cnblogs.com/Serene-shixinyi/p/7624555.html