洛谷P1089 津津的储蓄计划
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main(){
int cu=0,cm=0;
for(int yusuan,i=1;i<=12;++i){
cu+=300;
cin>>yusuan;
if(cu<yusuan){
printf("%d\n",-i); return 0;
}
cu-=yusuan;
cm+=(cu)/100*100;
cu-=cu/100*100;
}
cout<<cm*1.2+cu;
}
洛谷P1090 合并果子
#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
priority_queue<int ,vector<int>, greater<int> > q;
int main(){
int n,a;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a;
q.push(a);
}
int ans=0;
for(int i=1;i<=n-1;i++){
int t1=q.top();q.pop();
int t2=q.top();q.pop();
ans+=t1+t2;
q.push(t1+t2);
}
printf("%d\n",ans);
return 0;
}
洛谷P1091 合唱队形
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,a[105],f[105],g[105];
int main(){
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i],f[i]=1,g[i]=1;
for(int i=2;i<=n;i++)
for(int j=1;j<=i-1;++j)
if(a[i]>a[j]) f[i]=max(f[i],f[j]+1);
for(int i=n-1;i>=1;--i)
for(int j=i+1;j<=n;++j)
if(a[i]>a[j]) g[i]=max(g[i],g[j]+1);
int ans=0;
for(int i=1;i<=n;i++)
ans=max(ans,f[i]+g[i]);
ans--;
cout<<n-ans;
}
洛谷P1092 虫食算
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define MAXN 30
char s[4][MAXN];
bool use[MAXN];
int flag[MAXN],n;
inline int id(char p){ return p-'A'+1; }
void DFS(int x,int y,int t){
if(x==0){
if(t==0) {
for(int i=1;i<=n;++i) printf("%d ",flag[i]);
exit(0);
}
return;
}
for(int i=x-1;i>=1;--i){
int w1=flag[id(s[1][i])],w2=flag[id(s[2][i])],w3=flag[id(s[3][i])];
if(w1==-1||w2==-1||w3==-1) continue;
if(((w1+w2)%n!=w3)&&((w1+w2+1)%n!=w3)) return;
}
if(flag[id(s[y][x])]==-1){
for(int i=n-1;i>=0;--i)
if(!use[i]){
if(y!=3){
flag[id(s[y][x])]=i,use[i]=1;
DFS(x,y+1,t);
flag[id(s[y][x])]=-1,use[i]=0;
}else {
int w=flag[id(s[1][x])]+flag[id(s[2][x])]+t;
if(w%n!=i) continue;
use[i]=1,flag[id(s[3][x])]=i;
DFS(x-1,1,w/n);
use[i]=0,flag[id(s[3][x])]=-1;
}
}
}else{
if(y!=3) DFS(x,y+1,t);
else{
int w=flag[id(s[1][x])]+flag[id(s[2][x])]+t;
if(w%n!=flag[id(s[3][x])]) return;
DFS(x-1,1,w/n);
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=3;++i) scanf("%s",s[i]+1);
memset(flag,-1,sizeof flag );
DFS(n,1,0);
return 0;
}