A:
输出:
2
1
刚开始读题不清,居然一直在用立方体做,最后才慢慢明白
#include<stdio.h>
int main(){
int ans,a,b,c,d,e,f;
int left2,left1;
while(1){
scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f);
if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0){
break;
}
ans=d+e+f+(c+3)/4;
left2=d*5;//4*4里面的剩余
if(c%4==3){
left2++;
}else if(c%4==2){
left2+=3;//这里可以再放三个!
}else if(c%4==1){
left2+=5;//注意!这里放五个!
}
if(left2<b){
ans+=((b-left2)+8)/9;
}
left1=36*ans-36*f-25*e-d*16-9*c-4*b;
if(left1<a){
ans+=((a-left1)+35)/36;
}
printf("%d\n",ans);
}
return 0;
}
B:
背包包,求最长公共子序列
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char a[500],b[500];
int dp[500][500];
int main(){
while(scanf("%s %s",a,b)!=EOF){
for(int i=1;i<=strlen(a);i++){
for(int j=1;j<=strlen(b);j++){
if(a[i-1]==b[j-1]){
dp[i][j]=dp[i-1][j-1]+1;//因为第i位和第j位是相同的,所以在[i-1][j-1]的基础上+1得到[i][j]
}else{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);//依据状态的含义可以知道d[i][j]为d[i][j-1]和d[i-1][j]之间的较大的那个,这样才能维持“最长”这个特性。
}
}
}
printf("%d\n",dp[strlen(a)][strlen(b)]);
}
return 0;
}
D:
#include<stdio.h>
#include<string.h>
int n,k,ans;
char chess[10][10];
int t[10];//行
void dfs(int hang,int qizi){
if(qizi==k){
ans++;
return;
}
if(hang>=n){
return;
}
for(int i=0;i<n;i++){
if(!t[i]&&chess[hang][i]=='#'){
t[i]=1;
dfs(hang+1,qizi+1);
t[i]=0;//回溯
}
}
dfs(hang+1,qizi);//搜完这一行再搜下一行
}
int main(){
while(scanf("%d%d",&n,&k)!=EOF){
if(n==-1&&k==-1){
return 0;
}
ans=0;
for(int i=0;i<n;i++){
scanf("%s",chess[i]);
}
dfs(0,0);
printf("%d\n",ans);
}
return 0;
}
E:
#include<stdio.h>
char ch[105];
int a[105];
int main(){
int n,flag;
scanf("%d",&n);
scanf("%s",ch);
for(int i=1;i<=n;i++){
a[i]=ch[i-1]-'0';
}
flag=0;
for(int i=a[1];i<=1000;i++){
int sum=0,num=0;
for(int j=1;j<=n;j++){
sum+=a[j];
if(sum==i){
num++;
sum=0;
}
if(sum>i){
break;
}
}
if(sum==0&&num>1){
flag=1;
}
}
if(flag){
printf("YES\n");
}else{
printf("NO\n");
}
return 0;
}
J:
水题
#include<stdio.h>
int n,m,a[105];
int l,r;
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d %d",&l,&r);
for(int j=l;j<=r;j++){
a[j]++;
}
}
for(int i=1;i<=n;i++){
if(a[i]!=1){
printf("%d %d",i,a[i]);
return 0;
}
}
printf("OK");
return 0;
}